博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS程序的启动过程介绍
阅读量:6550 次
发布时间:2019-06-24

本文共 1724 字,大约阅读时间需要 5 分钟。

    大家在学习iPhone开发时候,都会写HelloWorld程序。大家一般都是通过向导,生成项目,然后通过模拟器启动应用程序。但是大家知道其背后的启动过程吗?也就是当点击程序图标启动程序开始到退出程序整个使用运行过程中底下的代码都发生了什么?有理解了这个才能游刃有余的掌握iPhone程序的开发,否则在写程序的时候有点浑浑僵僵不知所以然的感觉。

    在开始介绍HelloWorld程序之前,我们先了解下UIApplication:

UIApplication

    UIApplication的核心作用是提供了iOS程序运行期间的控制和协作工作。

    UIApplication的一个主要工作是处理用户事件,它会起一个队列,把所有用户事件都放入队列,逐个处理,在处理的时候,它会发送当前事件到一个合适的处理事件的目标控件。此外,UIApplication实例还维护一个在本应用中打开的window列表(UIWindow实例),这样它就可以接触应用中的任何一个UIView对象。UIApplication实例会被赋予一个代理对象UIApplicationDelegate,以处理应用程序的生命周期事件(比如程序启动和关闭)、系统事件(比如来电、记事项警告)等等。

    每一个程序在运行期必须有且仅有一个UIApplication(或则其子类)的一个实例。你可以通过调用[UIApplication sharedApplication]来得到这个单例实例的指针。

 

HelloWorld程序

    打开项目文件,找到Other Sources文件夹下的main.m源文件,打开,你将会看到如下代码:

int main(int argc, char *argv[]) {

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

int retVal = UIApplicationMain(argc, argv, nil, nil);

[pool release];

return retVal;

}

    和所有的C程序一样,这是个程序入口main函数(NSAutoreleasePool内存自动回收池,不在这篇文章讨论的范围)。接下来我们来看UIApplicationMain函数,查看iPhone开发文档:

int UIApplicationMain (

   int argc,
   char *argv[],
  
*principalClassName,
  
*delegateClassName
);

 
 
 
 
HelloWorldAppDelegate实现了UIApplicationDelegate协议,可以重写其所有方法。
 
 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{
    // Override point for customization after application launch.
    
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];
    return YES;
}

 
 

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.

- (void)loadView
{

    // add control

}

    至此,HelloWord程序启动过程以及介绍完成,大家对程序的启动过程有没有新的认识?

   

    总结程序启动的过程如下:

1. 程序入口main函数创建UIApplication实例和UIApplication代理实例。

2. 在UIApplication代理实例中重写启动方法,设置第一ViewController。

3. 在第一ViewController中添加控件,实现应用程序界面。

 

by sschu

转载地址:http://qyyco.baihongyu.com/

你可能感兴趣的文章
join命令实现文件内容拼接
查看>>
-bash:wget command not found的解决方法
查看>>
yara规则
查看>>
我的个人简历
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
KVM组件bug报告方法
查看>>
HTML5初学---坦克大战基础
查看>>
Solr增量更新索引
查看>>
抵制克苏恩[Lydsy2017年4月月赛]
查看>>
MySql Study Notes
查看>>
6 - laravel 基础 - 视图与模板引擎
查看>>
团队第二次作业
查看>>
linux 查询当前文件夹下的目录数量
查看>>
【python】入门第一篇
查看>>
1682: [Usaco2005 Mar]Out of Hay 干草危机
查看>>
supersr--NSURLConnection iOS2.0苹果原生请求
查看>>
iphone-common-codes-ccteam源代码 CCPlistFileReader.h
查看>>
构造方法
查看>>
SQL效率之索引
查看>>