是否有任何理由修改你的iOS应用程序中的main.m文件?

我试图更好地理解基本iOS应用程序中包含的每个文件的目的。

有没有任何理由修改main.m文件? 我想知道这个文件是否需要被触及。 如果你修改它,为什么?

在所有情况下的99.9%,没有必要碰main.m

在另外的0.1%中,您可能需要更改对UIApplicationMain()函数调用的参数。 这个函数的最后两个参数指定了表示主应用程序的类名(默认情况下为UIApplication )和应用程序委托。

如果您决定UIApplication ,则可以将第三个参数设置为您的子类的名称。 如果要截取您的应用程序处理的某些事件(覆盖sendEvent:UIApplication子类化可能很有用。

如果您只是决定重命名该类,则您的应用程序委托类的名称可能会更改。 另外,如果UIApplicationMain()的第四个参数是nil (这是在iOS 5中不使用Storyboarding的项目模板中的默认值),则表示您在应用程序的主要NIB文件中创build了应用程序委托对象。 如果你决定改变这个决定(例如,为了适应现有项目的Storyboarding),你将不得不改变第四个参数来告诉UIApplicationMain()它应该实例化的类的名字。

有些情况下你可能想修改这个文件。 默认情况下,iOS开发模板假定您将使用Interface Builder来提供您的初始界面,并使用作为UIApplicationMain()的最后一个参数的零值来执行此操作,如下所示:

 return UIApplicationMain(argc, argv, nil, nil); 

如果您希望以编程方式构造您的接口,则可能需要使用最后一个参数指定您的应用程序委托类:

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

这是为了让应用程序知道从哪里开始构build您的界面。 使用Interface Builder构build一个,您可以通过Info.plist键之一来指示要使用哪个IB文件作为基础。

如果你在自动引用计数之前创build了一个main.m文件,你可能会有一个显式的NSAutoreleasePool来包装这个函数:

 NSAutoreleasePool *pool = [NSAutoreleasePool new]; int retval = UIApplicationMain(argc, argv, nil, NSStringFromClass([SPAppDelegate class])); [pool release]; return retval; 

在ARC下,这将被转换为@autoreleasepool

 @autoreleasepool { int retVal = UIApplicationMain(argc, argv, nil,NSStringFromClass([SPAppDelegate class])); return retVal; } 

这是我以任何方式编辑main.m文件的唯一两种情况。

一般你不需要碰这个文件。 这是所有的样板代码。 任何iniialization通常在您的应用程序委托中完成。