有什么理由修改主.在你的iOS应用程序中



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

是否有任何理由修改main。m文件?我在想那份文件是否需要被碰一下。如果你要修改它,为什么?

在99.9%的情况下,不需要触摸main.m

在另外的0.1%中,您可能希望更改UIApplicationMain()函数调用的参数。这个函数的最后两个参数指定了代表主应用程序(默认是UIApplication)和应用程序委托的类的名称。

如果决定创建UIApplication的子类,可以将第三个参数设置为子类的名称。子类化UIApplication可以是有用的,如果你想拦截某些事件你的应用程序处理(覆盖sendEvent:)。

你的应用程序委托类的名称可能会改变,如果你只是决定重命名该类。同样,如果UIApplicationMain()的第四个参数是nil(这是在iOS 5中不使用故事板的项目模板中的默认值),它表示你在应用程序的主NIB文件中创建了应用程序委托对象。如果你决定改变这个决定(例如,为一个现有的项目改编故事板),你就必须改变第四个参数,以便告诉UIApplicationMain()它应该实例化的类的名称。

在某些情况下,您可能需要修改该文件。默认情况下,iOS开发模板假设您将使用Interface Builder来提供初始接口,并且使用nil值作为UIApplicationMain()的最后一个参数,如下所示:

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

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

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

这样应用程序就知道从哪里开始构造接口。对于使用Interface Builder构建的文件,您可以通过一个Info指示使用哪个IB文件作为基础文件。plist钥匙。

如果你有一个main。你可以使用一个显式的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。

一般不需要触摸main。m文件。这些都是样板代码。任何初始化通常在你的app委托中完成。

相关内容

  • 没有找到相关文章

最新更新