在iOS应用中,main()函数仅在最小程度上被使用,应用程序运行所需的大多数实际工作由UIApplicationMain()函数来处理。因此,当在Xcode中开始一个新的应用程序工程时,每个工程模板都会创建一个main.m的文件,提供一个main()函数的标准实现。在用Swift开发iOS应用时,这个main.m文件已经被移除,取而代之的是AppDelegate.swift中的修饰符:
一旦有了这个修饰符,编译器会自动合成main.swift到工程中。
我们可以创建一个Objective-C的工程来看一下main()函数到底进行了什么操作:
动手写9.1.1 ObjectiveC->LearniOS->AppDelegate.h
一旦有了这个修饰符,编译器会自动合成main.swift到工程中。
我们可以创建一个Objective-C的工程来看一下main()函数到底进行了什么操作:
动手写9.1.1 ObjectiveC->LearniOS->AppDelegate.h(www.xing528.com)
main()函数只做了三件事:首先创建一个自动释放池(autoreleasepool),然后调用UIApplication Main()函数并将AppDelegate的类型传入,最后启用这个自动释放池。除了少数情况,我们均不应该改变这个main函数的实现。
main()函数的核心代码是UIApplicationMain()函数,该函数接收四个参数,并将其用于初始化应用程序。传递给该函数的默认值并不需要修改,但是这些默认值对应用程序启动的作用还是值得解释一下。
除了传给main()函数的argc和argv之外,UIApplicationMain()函数还需要两个字符串参数,用于标识应用程序的首要类,即应用程序对象所属的类和应用程序委托的类。如果首要类字符串的值为nil,UIKit就默认使用UIApplication类。如果应用程序委托类为nil,UIKit就会将应用程序主Nib文件(针对通过Xcode模板创建的应用程序)中的某个对象假定为应用程序的委托对象。如果将这些参数设置为非nil值,则在应用程序启动时,UIApplicationMain()函数会创建一个与传入值相对应的类实例,并将其用于既定的目的。因此,如果应用程序使用了UIApplication类的定制子类(本书不推荐这么做),就需要通过第三个参数指定该定制类的类名。
main()函数只做了三件事:首先创建一个自动释放池(autoreleasepool),然后调用UIApplication Main()函数并将AppDelegate的类型传入,最后启用这个自动释放池。除了少数情况,我们均不应该改变这个main函数的实现。
main()函数的核心代码是UIApplicationMain()函数,该函数接收四个参数,并将其用于初始化应用程序。传递给该函数的默认值并不需要修改,但是这些默认值对应用程序启动的作用还是值得解释一下。
除了传给main()函数的argc和argv之外,UIApplicationMain()函数还需要两个字符串参数,用于标识应用程序的首要类,即应用程序对象所属的类和应用程序委托的类。如果首要类字符串的值为nil,UIKit就默认使用UIApplication类。如果应用程序委托类为nil,UIKit就会将应用程序主Nib文件(针对通过Xcode模板创建的应用程序)中的某个对象假定为应用程序的委托对象。如果将这些参数设置为非nil值,则在应用程序启动时,UIApplicationMain()函数会创建一个与传入值相对应的类实例,并将其用于既定的目的。因此,如果应用程序使用了UIApplication类的定制子类(本书不推荐这么做),就需要通过第三个参数指定该定制类的类名。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。