程序启动过程
1.打开程序后先执行 SupportingFiels当中的main函数 在mian()函数中执行了一个UIApplicationMain()这个函数
int main(int argc, char * argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
1).UIApplicationMain当中的四个参数
UIApplicationMain(argh,argue,nil,NSStringFromClass([AppDelegate class]);
1)argh:使用main函数argc即可
2)argv:使用main函数argv即可
3)principalClassName:指定应用程序类名 (app 的象征), 该类必须是UIApplication(或子类),如果为nil,则用UIApplication类作为默认值
4)delegateClassName:指定应用程序的代理类,UIApplicationDelegate协议中定义方法,在该类中是实现
3.UIApplicationMain 中执行操作
int main(int argc, char *argv[]) { @autoreleasepool {
return UIApplicationMain(argc, argv, @"UIApplication", @"AppDelegate");
// 1.创建application对象
// 2.创建application的代理对象
// 3.把application和application的代理 进行绑定
// 4.开始事件循环 } }
4.UIApplicationMain函数会:
(1)根据principalClassName创建UIApplication对象
(2)根据delegateClassName创建一个delegate对象,并将该delegate对象赋值给UIApplication对象中的delegate属性
5.应用程序启动后,会建立应用程序的Main Runloop(事件循环),监听事件并调用注册的方法
(1)首先会在程序完毕后调用delegate对象的application:didFinishLaunchingWithOptions:方法
6.程序正常退出时UIApplicationMain函数才会返回
UIApplicationDelegate的简单介绍
// 程序第一次加载完成的时候调用
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSLog(@"didFinishLaunchingWithOptions");
return YES;
}
// 将要失去焦点 - 不能用户交互
- (void)applicationWillResignActive:(UIApplication *)application
{
NSLog(@"applicationWillResignActive");
}
// 已经获取焦点 - 可以用户交互
- (void)applicationDidBecomeActive:(UIApplication *)application
{
NSLog(@"applicationDidBecomeActive");
}
// 已经进入后台
- (void)applicationDidEnterBackground:(UIApplication *)application
{
NSLog(@"applicationDidEnterBackground");
// 保存数据
}
// 将要进入前台
- (void)applicationWillEnterForeground:(UIApplication *)application
{
NSLog(@"applicationWillEnterForeground");
// 恢复数据
}
// 程序挂了!!!
- (void)applicationWillTerminate:(UIApplication *)application
{
NSLog(@"applicationWillTerminate");
// 1.自动挂
// 2.手动挂
}