是否有任何理由修改你的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通常在您的应用程序委托中完成。