




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】IPhone开发纯代码从头开始
本文纯属自己记载自己的学习历程。可能每个人的感受和经历不一样。所以仅供大家随便看看,不要当真就好,认真你就输O(∩_∩)O~
我刚开始学苹果开发是公司需要,由于没人带,也就看着书上的例子,一个个拖控件拖得不亦乐乎,发现苹果程序还是蛮好写的,拖几下控件就能完成很多功能,但是一直没有大的进步,因为拖控件,而不是纯代码写的,控件为什么要这样拖,为什么这一样设置类都不知道,只能像背书一样做,一旦有一点不同,可能就弄不出来,而且只会去一个个比较,而不是去找问题,所以说刚入门用IB拖控件对新手是相当不利的,闲话少说,回到正题。
现在我创建一个名为Simple的project,后面所讲的都以这个工程名来说.
iPhone开发建工程,基本没有一个工程是完全空的,都是至少给了你mainviewcontroller.xib和一个你建的工程的appdelegate(SimpleAppDelegate),这些东西是干什么用的呢,iPhone开发的程序是怎样启动的呢,入口是哪里呢?接下来让我们一步步去分析。
首先,我把有这个空的Project的运行步骤大致描述下,首先运行main函数,运行到UIApplicationMain后,系统就知道去Simple-Info.plist中寻找,然后找到了MainWindow.xib,于是就运行,在MainWindow.xib中设置了他的代理为SimpleAppDelegate,于是启动SimpleAppDelegate函数,在SimpleAppDelegate.m中的didFinishLaunchingWithOptions方法里面将主界面进行设置,然后工程完成启动.
现在我们从头开始写一个简单的iPhone程序。以纯代码的方式来向大家呈现(可以参照前面xib的实现).
删掉所有东西:main函数;
Simple-Info.plist中Mainnibbaswname那一行;
MainWindow.xib;
SimpleAppDelegate的.h和.m文件。
第一步:首先写main函数#import<UIKit/UIKit.h>
intmain(intargc,char*argv[]){
NSAutoreleasePool*pool=[[NSAutoreleasePoolalloc]init];
intretVal=UIApplicationMain(argc,argv,nil,@"SimpleAppDelegate");
[poolrelease];
returnretVal;
}
intretVal=UIApplicationMain(argc,argv,nil,nil);
这一行的时候,大家注意,UIApplicationMain一共有4个参数,前面两个不多说大家知道,重要的是第3,4个参数,第三个参数指的是主类(一个UIApplication的子类,一般为nil就可以了,也可以自己定义一个继承自UIApplication的类SimpleApplication,然后使用[SimpleApplicationdescription]当第三个参数),重点来了,第四个参数是真正做事的类,他是一个代理(也就是前面说的SimpleAppDelegate),指定SimpleAppDelegate程序才能知道接下来是哪个函数来工作,iPhone开发中UIApplication类自己是不做事的,他把所有的事都让他的代理去做.第二步创建一个SimpleAppDelegate类(基于NSObject的)#import<UIKit/UIKit.h>
@interfaceSimpleAppDelegate:NSObject<UIApplicationDelegate>{
}
@end
可以看到我在类中添加了UIApplicationDelegate,这是因为SimpleAppDelegate必须实现UIApplicationDelegate的方法,而UIApplicationDelegate具体有哪些方法是由系统帮你已经确定好的,所以可以说任何一个iPhone程序都需要实现UIApplicationDelegate这个代理,这样我们就是用纯代码建立了一个完全空的程序接下来,我们用这个空的project来实现在界面上显示一个Hi,APPLE,
首先我在.m文件里实现UIApplicationDelegate的一个方法applicationDidFinishLaunching:这个方法是程序启动时调用的.我在里面实例化了一个window,因为我们需要一个主窗口
#import"SimpleAppDelegate.h"
@implementationSimpleAppDelegate
-(void)applicationDidFinishLaunching:(UIApplication*)application{
UIWindow*window=[[UIWindowalloc]initWithFrame:[[UIScreenmainScreen]bounds]];
[windowmakeKeyAndVisible];
}
新建一个类NewViewController(基于NSObject)
#import<UIKit/UIKit.h>
@interfaceNewViewController:UIViewController{
}
@end
因为要显示在界面上,所以继承了UIViewController
#import"NewViewController.h"
@implementationNewViewController
-(void)loadView
{
[superloadView];
UILabel*label=[[UILabelalloc]initWithFrame:CGRectMake(100,100,100,30)];
label.text=@"Hi,APPLE";
[self.viewaddSubview:label];
[labelrelease];
}
@end
这样一个纯代码的工程完成,在界面上显示了Hi,APPLE,view的默认颜色的黑色的,如果想换颜色可以在NewViewController.m的loadView中使用
self.view.backgroundColor=[UIColoryellowColor];
来设置背景色以下是关于
<!--
/*FontDefinitions*/
@font-face
{font-family:宋体;
panose-1:0000000000;
mso-font-charset:134;
mso-generic-font-family:auto;
mso-font-format:other;
mso-font-pitch:variable;
mso-font-signature:101677825402621440;}
@font-face
{font-family:Cambria;
panose-1:2453546324;
mso-font-charset:0;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:300010;}
/*StyleDefinitions*/
p.MsoNormal,li.MsoNormal,div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:12.0pt;
font-family:"TimesNewRoman";
mso-ascii-font-family:Cambria;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:Cambria;
mso-fareast-theme-font:minor-latin;
mso-hansi-font-family:Cambria;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"TimesNewRoman";
mso-bidi-theme-font:minor-bidi;
mso-fareast-language:EN-US;}
@pageSection1
{size:612.0pt792.0pt;
margin:72.0pt90.0pt72.0pt90.0pt;
mso-header-margin:36.0pt;
mso-footer-margin:36.0pt;
mso-paper-source:0;}
div.Section1
{page:Section1;}
-->
UIApplicationDelegate的知识,(来源于不知名网友前辈)看了就知道我为什么要用-(void)applicationDidFinishLaunching:(UIApplication*)application这个方法
<!--
/*FontDefinitions*/
@font-face
{font-family:宋体;
panose-1:0000000000;
mso-font-charset:134;
mso-generic-font-family:auto;
mso-font-format:other;
mso-font-pitch:variable;
mso-font-signature:101677825402621440;}
@font-face
{font-family:Cambria;
panose-1:2453546324;
mso-font-charset:0;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:300010;}
/*StyleDefinitions*/
p.MsoNormal,li.MsoNormal,div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:12.0pt;
font-family:"TimesNewRoman";
mso-ascii-font-family:Cambria;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:Cambria;
mso-fareast-theme-font:minor-latin;
mso-hansi-font-family:Cambria;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"TimesNewRoman";
mso-bidi-theme-font:minor-bidi;
mso-fareast-language:EN-US;}
@pageSection1
{size:612.0pt792.0pt;
margin:72.0pt90.0pt72.0pt90.0pt;
mso-header-margin:36.0pt;
mso-footer-margin:36.0pt;
mso-paper-source:0;}
div.Section1
{page:Section1;}
-->
UIApplicationDelegate是一个协议定义,同样SampleDelegate也需要实现UIApplicationDelegate中定义的方法,只是这个协议是系统定义好的(具体可以参看UIApplicationDelegate.h)而SimpleProtocol是我们自己定义的,但是要做的事情相同,就是SampleDelegate需要去实现这UIApplicationDelegate协议定义好的方法,这些方法就是UIApplication对象监听到系统变化的时候通知UIApplication对象代理类SampleDelegate执行的相应方法。下面是SampleDelegate的实现代码写在SampleDelegate.m中:
@implementationSampleDelegate
-(void)applicationWillResignActive:(UIApplication*)application{}
-(void)applicationDidBecomeActive:(UIApplication*)application{}
-(void)applicationDidEnterBackground:(UIApplication*)application{}
-(void)applicationWillEnterForeground:(UIApplication*)application{}
-(void)applicationWillTerminate:(UIApplication*)application{}
-(void)applicationDidReceiveMemoryWarning:(UIApplication*)application{}
-(void)applicationSignificantTimeChange:(UIApplication*)application{}
-(void)applicationDidFinishLaunching:(UIApplication*)application{}
-(void)application:(UIApplication*)applicationwillChangeStatusBarFrame:(CGRect)newStatusBarFrame{}
-(void)application:(UIApplication*)applicationwillChangeStatusBarOrientation:(UIInterfaceOrientation)newStatusBarOrientationduration:(NSTimeInterval)duration{}
-(BOOL)application:(UIApplication*)applicationhandleOpenURL:(NSURL*)url{
returnYES;
}
-(void)application:(UIApplication*)applicationdidChangeStatusBarOrientation:(UIInterfaceOrientation)oldStatusBarOrientation{}
-(void)application:(UIApplication*)applicationdidChangeSetStatusBarFrame:(CGRect)oldStatusBarFrame{}
@end
现在来看协议中定义的这些需要实现的方法分别是什么作用:
1、-(void)applicationWillResignActive:(UIApplication*)application
说明:当应用程序将要入非活动状态执行,在此期间,应用程序不接收消息或事件,比如来电话了
2、-(void)applicationDidBecomeActive:(UIApplication*)application
说明:当应用程序入活动状态执行,这个刚好跟上面那个方法相反
3、-(void)applicationDidEnterBackground:(UIApplication*)application
说明:当程序被推送到后台的时候调用。所以要设置后台继续运行,则在这个函数里面设置即可
4、-(void)applicationWillEnterForeground:(UIApplication*)application
说明:当程序从后台将要重新回到前台时候调用,这个刚好跟上面的那个方法相反。
5、-(void)applicationWillTerminate:(UIApplication*)application
说明:当程序将要退出是被调用,通常是用来保存数据和一些退出前的清理工作。这个需要要设置UIApplicationExitsOnSuspend的键值。
6、-(void)applicationDidReceiveMemoryWarning:(UIApplication*)application
说明:iPhone设备只有有限的内存,如果为应用程序分配了太多内存操作系统会终止应用程序的运行,在终止前会执行这个方法,通常可以在这里进行内存清理工作防止程序被终止
7、-(voi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 影响跨境电商增长的全球贸易壁垒分析
- 辽宁省辽西重点高中2025届高三下学期模拟预测试题 政治 含答案
- 统筹推进教师教育能力提升的背景意义及必要性
- 白酒行业创新驱动与转型路径
- 多元化学习模式在语文教学中的应用
- 国际儿童节课件4
- 智能健美操设备的设计与应用前景
- 新能源与抽水蓄能的综合利用方案
- 智游新纪元模板
- 电商节购物金融攻略
- 地表水水质自动监测站运行维护技术规范
- 2023年最新的郭德纲单口相声济公传全集
- 健康证申请证明(通用)
- 中国中化集团收购加拿大钾肥公司的商务谈判计划书
- 天然气管线施工无损检测方案
- YC∕T 266-2008 烟用包装膜
- 中油即时通信安装手册(二厂)
- 西北工业大学台湾交换生入学申请表
- 【精品】沟渠整治工程施工方案
- 新员工入职试岗考核表
- 2010年全国辐射环境监测方案
评论
0/150
提交评论