IOS应用的启动流程

以上是Xcode4.2中不采用storyboard应用的默认启动流程图。对于采用了storyboard的应用,UIApplicationMain()将会额外加载应用的主要storyboard文件,从而创建窗口和初始视图。

main()的变化

Main函数仍是应用的起点,其代码如下:

int main(int arg,char *argv[])

{

    @autoreleasepool{

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

}

}

main()采用了新的@autoreleasepool{}函数,以便支持LLVM3.但这一变化不会影响应用的启动顺序。

我们再来看看UIApplicationMain函数

int UIApplicationMain{

      int argc,

      char *argv[],

      NSString *principalClassName,

      NSString * delegateClassName

}

第一个参数表示参数的个数,

第二个参数表示装载函数的数组,

第三个参数,是UIApplication类名或其子类名,若是nil,则默认使用UIApplication类名。

第四个参数是协议UIApplicationDelegate的实例化对象名,如果是nil,则从main nib文件中加载委托对象。这个对象就是UIApplication对象监听到系统变化的时候通知其执行的相应方法。

在我们生成的HelloWorld应用程序中,第三个和第四个参数都为nil,那就是UIApplication和HelloWorldAppDelegate了

需要注意的是第四个参数的变化,之前是nil,而这里已经更改了。第四个参数代表该应用的Delegate初始化的类名,如果从应用的主nib文件加载代理对象,则将该参数设置为nil。

显然,我们的应用代理将不会由之前的MainWindow.xib加载,而是直接由UIApplicationMain()函数创建。实际上,项目中已经不再有MainWindow.xib文件。

 

 

在Xcode4.2以及以后的版本去掉main xib文件的原因很可能是storyboard的导入。storybo基于试图控制器,而非视图或窗口。

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

我们在打开HelloWorldAppDelegate文件,我们会看到这样的代码:

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

  self.window.rootViewController=self.viewController;

[self.window makeKeyAndVisible];

return YES;

我们知道,每个应用程序有个UIWindow,这window负责管理和协调应用程序的屏幕显示。在这里把HelloWorldViewController实例赋值给window的rootViewController,rootViewController的view将会作为UIWindow的首视图。

好的,我们就可以在HelloWorldViewController的loadView里添加我们需要的控件了。

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

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

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

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

转载于:https://my.oschina.net/ifengzi/blog/93744

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值