Mat*_*alk 16 cocoa-touch program-entry-point objective-c ios
我试图更好地理解基本iOS应用程序中包含的每个文件的用途.
有没有理由修改main.m文件?我想知道是否需要触及该文件.如果你修改它,为什么?
Ole*_*ann 17
在99.9%的案例中,没有必要触摸main.m.
在另一个0.1%中,您可能希望更改对函数的调用的UIApplicationMain()参数.此函数的最后两个参数指定代表主应用程序(UIApplication默认情况下)和应用程序委托的类的名称.
如果您决定子类化UIApplication,则应将第三个参数设置为子类的名称.UIApplication如果要拦截应用处理的某些事件(覆盖sendEvent:),则子类可能很有用.
如果您只是决定重命名该类,则应用程序委托类的名称可能会更改.此外,如果第四个参数UIApplicationMain()是nil(这是在iOS 5中不使用Storyboarding的项目模板中的默认参数),则表示您在应用程序的主NIB文件中创建了应用程序委托对象.如果您决定更改该决定(例如,为现有项目调整Storyboarding),则必须更改第四个参数以告知UIApplicationMain()应该实例化的类的名称.
Bra*_*son 11
在某些情况下,您可能希望修改此文件.默认情况下,iOS开发模板假设您将使用Interface Builder提供初始界面,并且在存在nil值作为最后一个参数的情况下执行此操作UIApplicationMain(),如下所示:
return UIApplicationMain(argc, argv, nil, nil);
Run Code Online (Sandbox Code Playgroud)
如果您希望以编程方式构造接口,则可能需要使用最后一个参数指定应用程序委托类:
return UIApplicationMain(argc, argv, nil, NSStringFromClass([SPAppDelegate class]));
Run Code Online (Sandbox Code Playgroud)
这样应用程序就知道从哪里开始构建接口.使用Interface Builder构建一个,您可以通过一个Info.plist键指示要用作基础的IB文件.
如果在自动引用计数之前创建了一个main.m文件,则可能有一个包含此函数的显式NSAutoreleasePool:
NSAutoreleasePool *pool = [NSAutoreleasePool new];
int retval = UIApplicationMain(argc, argv, nil, NSStringFromClass([SPAppDelegate class]));
[pool release];
return retval;
Run Code Online (Sandbox Code Playgroud)
在ARC下,这将转换为@autoreleasepool:
@autoreleasepool {
int retVal = UIApplicationMain(argc, argv, nil,NSStringFromClass([SPAppDelegate class]));
return retVal;
}
Run Code Online (Sandbox Code Playgroud)
这是我以任何方式编辑main.m文件的唯一两种情况.
| 归档时间: |
|
| 查看次数: |
5076 次 |
| 最近记录: |