任何一个程序, 无论是基于MOC OS还是iOS, 程序都是从mai.m文件的main函数开始执行的
int main(int argc,char *argv[])
{
@autoreleasepool{
returnUIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
执行UIApplicationMain函数时做了跳转, 转到了AppDelete中
UIApplicationMain在程序入口函数main函数中调用, 主要实现了3个功能:
1.创建应用程序(UIApplication)实例
2.创建应用程序代理实例
3.建立事件循环 (runloop:死循环, 不断监测程序运行状态, 是否被触摸, 晃动等)
UIApplicationMain剖析
intUIApplicationMain(
int argc,
char *argv[],
NSString*principalClassName,
NSString*delegateClassName);
1.principalClassName:应用程序对象的类名 (UIApplication或其子类)
2.delegateClassNanme:应用程序delegate类名. (何接受了UIApplicationDelegate的类)
UIApplicationMain根据上述两个类名创建应用程序实例, 应用程序代理实例. 然后建立事件循环(runloop), 监测程序的各种事件 (程序开始启动, 接受到触摸等等)
应用程序代理, 主要监测应用程序的抓过太并做出响应的处理.
应用程序的状态有很多, 比如(程序启动, 进入或缺状态, 进入到后台, 内存警告, 收到远程消息等等
任何接受了UIApplicationDelegate歇息的对象都可以成为应用程序代理
一旦应用程序的某种状态触发, 就会执行相应地代理方法.
法都与应⽤用程序运⾏行状态有关,它们由应⽤用程序代理实现。UIApplication
对象负责调⽤用。
⽅方法名 描述
application:didFinishLaunchingWithOptions:
告诉delegate程序启动即将完成,程序准备要运⾏行。
(delegate实现这个⽅方法时,要创建window对象,将程序内容通过window呈现给⽤用户。)
applicationDidBecomeActive:告诉delegate应⽤用程序已经进⼊入活跃状态(重新执⾏行被暂停的任务)
applicationWillResignActive:
告诉delegate应⽤用程序即将进⼊入⾮非活跃状态(暂停游戏、停⽌止timer等)
applicationDidEnterBackground:
告诉delegate应⽤用程序已经进⼊入到了后台(存储⽤用户数据、释放⼀一些共享资源、停⽌止timer等)
applicationWillEnterForeground:告诉delegate应⽤用程序即将进⼊入前台(取消所有进⼊入后台时暂停的任务)
delegate是iOS重要的设计模式, 理解它的原理, 有助于写出优质的代码
main函数时程序的入口. UIApplicationMain函数创建了应用程序实例, 应用程序代理实例, 建立事件循环