iOS 应用是如何创建的

iOS app life cycle 生命周期图

image

第一步: Main

有C相关语言开发经验的朋友都知道,所有程序运行都是从 main 程序开始的。

#import <UIKit/UIKit.h>
#import "NoteNavAppDelegate.h"
int main(int argc, char *argv[])
{
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([NoteNavAppDelegate class]));
    }
}

第二步:UIApplicationMain

UIApplicationMain 到底为我们做了什么事情?

2.1、创建了UIApplication的实例。
每一个应用程序都有一个UIApplication或其子类型的实例。当程序被加载,函数方法UIApplicationMain就被调用执行,它创建了单件模式的UIApplication对象。
2.2、在 Info.plist 文件中寻找初始化需要的一些元素,这个文档包含了程序需要初始化的一些元素比如:icon、名称、指定主界面的nib文件等等。
其中的 NSMainNibFile => MainWindow 指向主界面。


app_timeline_template

第三步:主界面

主界面nib页面又给我们指定了什么东西呢?

3.1、File’s Owner 表示当前nib文件的使用者可以看到是UIApplication
3.2、First Responder 可以用于处理很多事件.句柄
3.3、还指定了 application’s delegate
3.4、A window 用于显示程序加载背景.  UIWindow class提供了一个container for views的管理和显示。

app_timeline_customization

下面是一个具有导航的Main Nib 文件的引用关系。

image

第四步:UIApplication加载结束后

接下来处理的关键在于3.3所指定的delegate

当UIApplication加载结束后,会给它所指定的delegate发一个application:didFinishLaunchingWithOptions: 事件消息.
然后在这个方法里面创建自己的view controlle以及给主window指定subview.

接下来的事情就是由程序员自己编程控制了。

从MVC的角度看 iOS 的那些类

TRwBbXoDTTzZG9mfMiYr39dTjeU37BRC_m

iOS的消息流转流程

1335413274_3604

参考资料:

IPHONE基于窗口应用程序的生死
http://guogoul.com/2010/10/29/iphone-window-based-applicatio/

iOS: some notes
http://blog.csdn.net/totogogo/article/details/7353812

原文地址:https://www.cnblogs.com/ghj1976/p/2518284.html