0

我有点困惑,因为我有一个在其示例代码中使用第一个 main.m 的类,而我的项目使用后者。我在使用 applicationDidFinishLaunching 将类实例化时遇到了很多麻烦,我认为这些不同的 main.m 文件可能是罪魁祸首。我的项目和示例项目之间的 .xib 文件与 Main Nib 名称的 .plist 设置相同。代表都正确连接

#import <UIKit/UIKit.h>
#import "MidiTestingAppDelegate.h"

int main(int argc, char *argv[])
{
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([MidiTestingAppDelegate class]));
    }
}

#import <UIKit/UIKit.h>

int main(int argc, char *argv[])
{
#if __has_feature(objc_arc)
    @autoreleasepool
    {
        int retVal = UIApplicationMain(argc, argv, nil, nil);
        return retVal;
    }
#else
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    int retVal = UIApplicationMain(argc, argv, nil, nil);
    [pool release];
    return retVal;
#endif
}

我假设前者直接进入 App Delegate 而后者直接加载 UIApplication?那是对的吗?

4

2 回答 2

4

这里有很多不好的信息。

首先,假设你有一个最新版本的 Xcode,第一个版本就是你所需要的。

@autoreleasepool语法适用非 ARC 项目。编译器将其全部计算出来,并在任何一种情况下都会生成适当的代码。

第二段代码使用特征检测宏 ( ) 在新语法和创建池的旧方法__has_feature之间做出决定,具体取决于是否启用了 ARC。如果您正在运行没有可用新语法的旧版本的 Xcode,您只需要使用第二段代码。@autoreleasepoolNSAutoreleasePool

于 2012-06-08T14:11:15.677 回答
0

第二个例子是不良形式。这是因为@autoreleasepool可以在非 ARC 项目中使用,并且实际上比创建自己的池更快(链接)。

于 2012-06-08T14:11:10.513 回答