美文网首页
iOS main函数解析

iOS main函数解析

作者: Civiy | 来源:发表于2017-05-13 12:36 被阅读531次

我们都知道oc程序的入口是main函数,如下:

int main(int argc, char * argv[]) {

@autoreleasepool {

return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));

}

}

main函数的返回值是一个int类型 那么我们定义一个变量接收,并打印,看看这个参数是什么,能不能打印?

int main(int argc, char * argv[]) {

@autoreleasepool {

int a = UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));

NSLog(@"a=%d",a);

return a;

}

}

       经过测试,日志是没有输出的,说明UIApplicationMain是个死循环,那么先看一下UIApplicationMain参数都是什么。

argh 代表的是长度,argv代表的是char 型数组,系统默认传进来的.

然后主要分析后面两个参数

// If nil is specified for principalClassName, the value for NSPrincipalClass from the Info.plist is used. If there is no

// NSPrincipalClass key specified, the UIApplication class is used. The delegate class will be instantiated using init.

UIKIT_EXTERN int UIApplicationMain(int argc, char *argv[], NSString * __nullable principalClassName, NSString * __nullable delegateClassName);

       我们查看一下UIApplicationMain方法定义,发现后面两个参数都是NSString类型的,根据参数字面意思都是类名,第一个默认传nil,那具体代表的是哪个类?我们先从最后一个参数看起,最后一个是一个代理类类名,即AppDelegate的类名,NSStringFromClass([AppDelegate class]等价于@“AppDelegate”,后面这个是一个代理类,这个代理是实现的是谁的代理呢?查看AppDelegate.h发现是实现的UIApplication的代理,再根据苹果给出的注释来看,当这个类名为空时,先从Info.plist中读取NSPrincipalClass属性值,如果这个属性值不存在,则使用UIApplication类,说明最后两个参数一个是传UIApplication单例类,一个是实现UIApplication的代理AppDelegate,所以UIApplicationMain也可以改为UIApplicationMain(argc, argv, @"UIApplication", @"AppDelegate");其中第三个参数也可以是UIApplication类的子类。

我们再看一下UIApplicationMain死循环是什么?其实就是我们所说的runloop,那么内部开启死循环runloop的目的是什么?

1.保证当前线程(主线程)不被退出

2.负责监听事件(包括触摸事件、网络等等)

ps:目前只知道这个两种作用,有知道的可告解。

       以上是我对main函数的一点见解,如有不对的地方或有好的见解请提出,欢迎大家批评指正~~~

       虽然接触iOS这么久,一直没有研究过main函数的工作原理及参数意义,技术也一直没能提高,写下此文章记录一下自己的学习成果。

相关文章

  • iOS main函数解析

    我们都知道oc程序的入口是main函数,如下: int main(int argc, char * argv[])...

  • iOS main函数知多少

    iOS main函数 一个 iOS App 的 main 函数位于 main.m 中,这是我们熟知的程序入口。但对...

  • main函数解析

    public:因为权限必须最大static:不需要对象的,直接用主函数所属类名调用即可void:主函数没有具体的返...

  • main函数解析

    main是函数的名称, 是系统规定的名称, 系统启动程序就会调用名称叫做main的函数 main函数只能由系统调用...

  • iOS之UIView

    初识iOS APP开发#### 在iOS APP开发中, main函数仍是程序的入口和出口, 但main函数不需要...

  • (一)iOS程序运行原理

    一、main函数 iOS程序首先由main函数执行,由如上代码可以看到main函数执行后程序进入UIApplica...

  • 回顾, 总结

    iOS程序启动过程 执行Main函数 执行UIApplication Main函数 初始化UIApplicatio...

  • iOS知识点集合

    iOS程序运行流程 系统调用app的main函数 main函数调用UIApplicationMain. UIApp...

  • iOS开发知识储备

    iOS程序运行流程 系统调用app的main函数 main函数调用UIApplicationMain. UIApp...

  • Runloop模式

    2018-05-24iOS程序的入口是main函数,在main函数里int a = UIApplicationMa...

网友评论

      本文标题:iOS main函数解析

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