美文网首页
UIApplicationMain函数和什么是UIApplica

UIApplicationMain函数和什么是UIApplica

作者: 物非0人非 | 来源:发表于2022-05-09 11:33 被阅读0次

在 C 系语言中,程序的入口都是 main函数。对于一个 Objective-C 的 iOS app 项目,在新建项目时,Xcode 将帮我们准备好一个 main.m文件,其中就有这个 main函数:

int main(int argc, char * argv[])  
{
    @autoreleasepool { 
          return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 
    }
}

在这里我们调用了 UIKitUIApplicationMain 方法。
这个方法将根据第三个参数初始化一个 UIApplication 或其子类的对象并开始接收事件 (在这个例子中传入nil,意味使用默认的UIApplication)。
最后一个参数指定了 AppDelegate 类作为应用的委托,它被用来接收类似 didFinishLaunching 或者didEnterBackground这样的与应用生命周期相关的委托方法。另外,虽然这个方法标明为返回一个int,但是其实它并不会真正返回。它会一直存在于内存中,直到用户或者系统将其强制终止。

开发中,我们可以替换这个,然后在自己的文件AppController下实现这些方法didFinishLaunching或者 didEnterBackground这样的与应用生命周期相关的委托方法。也是没问题的。

image.png
main主要做了三件事情:

1、创建一个自动释放池
2、调用UIApplicationMain函数
3、释放自动释放池

UIApplicationMain函数作用

1、创建一个应用程序,创建应用程序代理
2、建立一个事件循环来捕捉处理用户的行为

什么是UIApplication?

1、一个iOS程序启动后创建的第一个对象就是UIApplication对象
2、每一个程序在运行期必须有且仅有一个UIApplication(或则其子类)的一个实例。创建UIApplication的单例实例,实现可以通过调用[UIApplication sharedApplication]来得到这个单例实例的指针
3、利用UIApplication对象,能进行一些应用级别的操作

[[UIApplication sharedApplication]applicationState] 获取程序状态
[[UIApplication sharedApplication]applicationIconBadgeNumber]小红点个数

4、处理用户事件,它会起一个队列,把所有用户事件都放入队列,逐个处理,在处理的时候,它会发送当前事件到一个合适的处理事件的目标控件。
5、维护一个在本应用中打开的window列表(UIWindow实例,这样它就可以接触应用中的任何一个UIView对象。UIApplication实例会被赋予一个代理对象,以处理应用程序的生命周期事件(比如程序启动和关闭)、系统事件(比如来电、记事项警告)等等

UIApplication继承自UIResponder,的主要作用: 提供了iOS程序运行期间的控制和协作工作,每个iOS程序运行期间都会有一个UIApplication实例,一般由main函数UIApplicationMain函数完成,而在代码中可以调用[UIApplication sharedApplication]方法来得到这个实例(有且仅有一个),比如可以利用它判断程序状态:

if([UIApplication sharedApplication].applicationState ==UIApplicationStateInactive){
   NSLog(@"程序在运行状态");
}

新建一个任意类型的iOS应用工程,在AppDelegate.h中会看到
AppDelegate :UIResponder <UIApplicationDelegate>

本类实现(采纳)了一个名叫UIApplicationDelegate的接口,且表明AppDelegate这个类就是这个工程中UIApplication实例的代理类。

看看main函数:

int main(int argc, char *argv[]){
   @autoreleasepool {
       return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
  }
}

这里传入了代理类到UIApplicationMain函数中,UIApplicationMain函数在生成唯一一个UIApplication的时候就可以把代理类的实例指针告诉这个单例对象了。

相关文章

网友评论

      本文标题:UIApplicationMain函数和什么是UIApplica

      本文链接:https://www.haomeiwen.com/subject/xbkhurtx.html