程序都是从Main方法入口的 IOS 也不例外
int main(int argc,char * argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
在IOS 里main 方法里有个UIApplicationMain里面带有4个参数
param 1: argc : 对应argv的参数数量
param 2: argv: 参数变量列表 (加载应用程序对应的-info.plist文件信息)
param 3: 指定UIApplication类或子类的名称。如果为nil默认就是UIApplication
param 4: 设置应用程序的代理对象。 如果是nil,则从应用程序的主nib文件加载的代理对象。
返回值: 这个方法一般不会返回,即使用户点击了IOS的home按钮,程序会把它移动到后台当中。
程序正常退出时,UIApplicationMain函数才返回
当程序启动完成后会来到AppDelegate,它继承UIResponder并遵循了UIApplicationDelegate
UIResponder:定义了响应和处理事件的接口,它是UIApplication、UIWindow、UIView的父类能够接收用户的运动事件和触摸事件
// 程序启动完成
(BOOL)application:(UIApplication *)applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions
// 程序失去交点
(void)applicationWillResignActive:(UIApplication *)application
// 程序进入后台
(void)applicationDidEnterBackground:(UIApplication *)application
// 程序进入前台
(void)applicationWillEnterForeground:(UIApplication *)application
// 程序获取焦点
(void)applicationDidBecomeActive:(UIApplication *)application
// 程序即将关闭
(void)applicationWillTerminate:(UIApplication *)application
如果程序没有设置主要的启动storyboard文件,而且也没有在
(BOOL)application:(UIApplication *)applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions
方法里设置window对象是不能进行正常活动
通常在此方法里设置
(BOOL)application:(UIApplication *)applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindowalloc]initWithFrame:[[UIScreenmainScreen]bounds]];
self.window.backgroundColor = [UIColorwhiteColor];
self.viewController =[[ViewController alloc] initWithNibName:@"ViewController" bundle:nil] ;
// 设置根视图控制器
self.window.rootViewController =self.viewController;
// 设置主视图并可见 窗口只有一个主视图
[self.windowmakeKeyAndVisible];
}
至此有了window对象后就能够在上面添加各种View进行自定义界面了
反之没有window对象 就看不见任何UI界面
详解 IOS 7.1 程序启动原理