UIApplicationMain
这个函数被调用时创建应用程序的主要入口点对象和应用程序委托和设置事件循环。
宣布
int UIApplicationMain(int argc, char * _Nonnull argv[], NSString *principalClassName, NSString *delegateClassName);
参数
argc | 参数列表中参数的个数;这通常是main相应的参数。 |
---|---|
argv | 一个可变的参数列表;这通常是main相应的参数。 |
principalClassName | UIApplication类或子类的名称。如果你指定为空, 则用UIApplication类作为默认值 。 |
delegateClassName | 指定应用程序的代理类 。如果principalClassName UIApplication指定的一个子类,您可能会指定委托的子类;子类实例接收应用程序委托的消息。指定零如果你从您的应用程序加载委托对象的主要nib文件。 |
返回值
即使一个整数指定返回类型,这个函数不返回。当用户退出一个iOS应用程序按按钮,应用程序移动到后台。
讨论
这个函数实例化应用程序对象的主要类和实例化委托从给定的类(如果有的话),并设置为应用程序委托。 它还设置主事件循环,包括应用程序的运行循环,并开始处理事件。 如果应用程序的信息。 plist文件指定一个主要nib文件加载,通过包括NSMainNibFile关键和有效的nib文件名称的值,这个函数加载nib文件。 尽管声明返回类型,这个函数不返回。 关于这个函数的行为更多的信息,请参阅“预期应用行为”为iOS应用程序编程指南。
其他
1.工作原理
UIApplicationMain函数会根据principalClassName创建UIApplication对象, 根据delegateClassName创建一个delegate对象, 并将该delegate对象赋值给UIApplication对象中的delegate属性
接着会建立应用程序的Main Runloop(事件循环),进行事件的处理(首先会在程序完毕后调用delegate对象的application:didFinishLaunchingWithOptions:方法)
程序正常退出时UIApplicationMain函数才返回
2.注释
delegateClassName是应用程序类的代理类。
如果主要nib文件(在info.plist文件中指定,key是NSMainNibFile)存在, 就会在nib文件对象里寻找Application对象和连接它的delegate, 因为UIApplication定义了一个delegte变量, 这个变量应该遵循UIApplicationDelegate, 负责控制程序的运行,
如果主nib文件没有这个类, 你应该自定义一个这样的类, 并将第四个参数改为这个类的类名。