main例程只做三件事:
1.创建一一个自动释放池,
2.调用UIApplicationMain函数,
3.释放自动释放池。
所以除了少数的例外, 你永远不应该改变这个函数的实现。
请注意:自动释放池用于内存管理,它是Cocoa的一种机制,用于延缓释放具有一定功能的代码块中创建的对象。
程序核心代码是UIApplicationMain函数,它接收四个参数,除了传给main函数的argc和argv之外,该函数还需要两个字符串参数,用于标识应用程序的首要类(即应用程序对象所属的类)和应用程序委托类。如果首要类字符串的值为nil, UIKit就缺省使用UIApplication类;如果应用程序委托类为nil,UIKit就会将应用程序主nib文 件(针对通过Xcode模板创建的应用程序)中的某个对象假定为应用程序的委托对象。如果将这些参数设置为非nil值,则在应用程序启动时, UIApplicationMain函数会创建一个与传入值相对应的类实例,并将它用于既定的目的。
因此,如果你的应用程序使用了UIApplication类的定制子类(这种做法是不推荐的),就需要在第三个参数指定该定制类的类名。 UIApplicationMain函数永远不会返回 那么导致return 永远无法执行 程序永远无法终止 它会一直等待用户的操作 点击、触摸 操作
UIApplicationMain函数函数作用
1.创建一个应用程序 创建应用程序代理
2.建立一个事件循环来捕捉处理用户的行为
什么是UIApplication?
1.UIApplication对象是应用程序的象征
2.每一个应用都有自己的UIApplication对象,而且是单例的
3.通过[UIApplication sharedApplication]可以获得这个单例对象
4.一个iOS程序启动后创建的第一个对象就是UIApplication对象
5.利用UIApplication对象,能进行一些应用级别的操作
转载:
https://blog.csdn.net/lg_codemachine/article/details/51520169
代码中UIApplicationMain函数创建了一个UIApplication对象,每个app都有且只有一个UIApplication对象,作用是维护运行循环,而且运行循环会一直循环下去。
UIApplicationMain还会创建类的对象,将其设置为UIApplication的delegate。在应用启动运行循环并开始接受事件前,UIApplication会想委托对象发送applocation:didFinishLaunchingWithOptions:,我们可以在这个方法里完成需要的初始设定。