您的位置:首页 > 移动开发 > IOS开发

ios程序的启动过程

2015-07-04 16:58 441 查看
在学习ios程序的时候,一般都会通过xcode的向导生成项目,且程序也能跑起来,很明显是xcode为我们做了很的工作,而这些工作对于想学好ios开发的我们而言是必须要了解的。

1.学过c语言的同学应该知道,c程序的入口点是main函数,既然object-c是面向对象的才,是不是也是从遵从了c的入口点呢?在你新建的工程supporting files下看看是否有main.m这个文件,确实如我们猜想,它就是oc程序的入口点了!

2.在main.m文件中,有这样的代码:

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

    @autoreleasepool {

        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));

    }


autoreleasepool是自动释放池,这个先放着,等学到内存管理等时候自然会学到。

在看看UIApplicationMain的四个参数:第一和第二是是c的内容,第三第四个才是oc的参数。
在讲第三第四个参数之前,先讲两个oc的类UIApplication和UIApplicationDelegate:
UIApplication:应用程序实例,这是面向对象编程的一个概念,我们知道,面向对象编程喜欢把事物抽象成类,UIApplication就是这个oc程序的抽象,用于在运行期间对应用程序的管理:

(1)管理应用程序的主消息队列,接收和分发用户或系统的事件。
(2)管理UIview实例的视图链接(应用程序的所有视图)。
(3)管理应用程序级的事件(通过通知它的代理)。
你可以通过[UIApplication shareApplication]获取这个实例。
UIApplicationDelegate:应用程序的代理,也就是UIApplication 的代理,什么是代理呢?简单的说是你的领导和你的关系,领导有事情就让你做,领导是被代理,你就是代理。

所以这里也一样,当有应用程序级(应用程序的生命周期)的事情发生时,UIApplication 就会让UIApplicationDelegate去处理。
那UIApplicationDelegate能处理那些事情?打开..AppDelegate.m文件,你会看到这几个方法:
//应用程序加载完成时调用
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    return YES;

}
//应用程序失去焦点时调用(比如有电话进来或是锁屏等)

- (void)applicationWillResignActive:(UIApplication *)application {

}
//进入后天调用

- (void)applicationDidEnterBackground:(UIApplication *)application {

}
//进入前台调用

- (void)applicationWillEnterForeground:(UIApplication *)application {

}
//应用程序获得焦点时调用

- (void)applicationDidBecomeActive:(UIApplication *)application {

}
//应用程序退出时

- (void)applicationWillTerminate:(UIApplication *)application {

}

细心的话时发现上面的六个方法是成对的关系。

现在回到UIApplicationMain第三第四个参数:
第三个参数就是UIApplication或是它的子类名,如果是nil,则默认是UIApplication。
第四个可能你也猜到了,是UIApplicationDelegate,应用程序的代理。

那UIApplicationMain这个函数到底做了什么事情,就是创建UIApplication实例,和它的代理UIApplicationDelegate,并启动消息循环。
带现在为止,还没有涉及到程序的UI,然而ios程序几乎全都涉及界面:
在消息循环启动完成之后,就创建程序的主窗口uiwindow,并设置uiwindow的根控制器,根控制器加载视图,视图加载你在上面布置的视图,接下来就是显示了。程序的启动就完成了。

1. 启动路线图:UIApplicationMain->创建UIApplication实例。
2. UIApplication创建并设置它的代理UIApplicationDelegate。
3. UIApplicationDelegate创建窗口uiwindow。
4.uiwindow设置它的控制器controller。
5.controller初始化它的视图uiview。
6.uiview显示你布置的控件或视图。
7.显示。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: