Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2697384
  • 博文数量: 877
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 5921
  • 用 户 组: 普通用户
  • 注册时间: 2013-12-05 12:25
个人简介

技术的乐趣在于分享,欢迎多多交流,多多沟通。

文章分类

全部博文(877)

文章存档

2021年(2)

2016年(20)

2015年(471)

2014年(358)

2013年(26)

分类: iOS平台

2015-08-19 15:58:04

程序启动原理
http://www.cnblogs.com/wendingding/p/3766347.html
UIApplicationMain


main函数中执行了一个UIApplicationMain这个函数


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


argc、argv:直接传递给UIApplicationMain进行相关处理即可 


principalClassName:指定应用程序类名(app的象征),该类必须是UIApplication(或子类)。如果为nil,则用UIApplication类作为默认值


 delegateClassName:指定应用程序的代理类,该类必须遵守UIApplicationDelegate协议


UIApplicationMain函数会根据principalClassName创建UIApplication对象,根据delegateClassName创建一个delegate对象,并将该delegate对象赋值给UIApplication对象中的delegate属性


接着会建立应用程序的Main Runloop(事件循环),进行事件的处理(首先会在程序完毕后调用delegate对象的application:didFinishLaunchingWithOptions:方法)


程序正常退出时UIApplicationMain函数才返回


复制代码
#import <UIKit/UIKit.h>


#import "YYAppDelegate.h"


int main(int argc, char * argv[])
{
    @autoreleasepool {
        // return UIApplicationMain(argc, argv, nil, NSStringFromClass([YYAppDelegate class]));
        // return UIApplicationMain(argc, argv, @"UIApplication", NSStringFromClass([YYAppDelegate class]));
        /*
         argc: 系统或者用户传入的参数个数
         argv: 系统或者用户传入的实际参数
         1.根据传入的第三个参数创建UIApplication对象
         2.根据传入的第四个产生创建UIApplication对象的代理
         3.设置刚刚创建出来的代理对象为UIApplication的代理
         4.开启一个事件循环
         */
         return UIApplicationMain(argc, argv, @"UIApplication", @"YYAppDelegate");
    }
}
复制代码
 


系统入口的代码和参数说明:


argc:系统或者用户传入的参数
argv:系统或用户传入的实际参数 
1.根据传入的第三个参数,创建UIApplication对象
2.根据传入的第四个产生创建UIApplication对象的代理
3.设置刚刚创建出来的代理对象为UIApplication的代理
4.开启一个事件循环(可以理解为里面是一个死循环)这个时间循环是一个队列(先进先出)先添加进去的先处理
 
ios程序启动原理


 四、程序启动的完整过程


1.main函数


2.UIApplicationMain


* 创建UIApplication对象


* 创建UIApplication的delegate对象


 


3.delegate对象开始处理(监听)系统事件(没有storyboard)


* 程序启动完毕的时候, 就会调用代理的application:didFinishLaunchingWithOptions:方法


* 在application:didFinishLaunchingWithOptions:中创建UIWindow


* 创建和设置UIWindow的rootViewController


* 显示窗口


 


3.根据Info.plist获得最主要storyboard的文件名,加载最主要的storyboard(有storyboard)


* 创建UIWindow


* 创建和设置UIWindow的rootViewController


* 显示窗口
阅读(260) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~