IOS程序启动过程

程序启动过程
这里写图片描述
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.手动挂
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章