XCode 4.2编译器错误

时间:2011-06-17 05:36:07

标签: objective-c xcode llvm

当我使用XCode 4.2(例如,单视图iOS应用程序)创建一个新项目时,“支持文件”-Folder中的main.m-File看起来像:

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

int main(int argc, char *argv[])
{
    int retVal = 0;
    @autoreleasepool {
    retVal = UIApplicationMain(argc, argv, nil, NSStringFromClass([iiiAppDelegate class]));
    }

    return retVal;
}

编译器设置(在构建设置中)是Apple 3.0 LLVM。当我将其更改为GCC 4.2或GCC4.2 LLVM时,它显示了main.m。

的错误

没有@autoreleasepool ...

我的Xcode中的哪个设置会导致这样的麻烦?为什么新项目的标准编译器是Apple 3.0LLVM而不是系统默认编译器(GCC4.2)?

2 个答案:

答案 0 :(得分:6)

回答你的第一个问题:

  

我的Xcode中的哪个设置会导致这样的麻烦?

编译器本身就是设置。将其更改为LLVM 3.0,不再有麻烦

回答你的第二个问题:

  

为什么新项目的标准编译器是Apple 3.0LLVM而不是系统默认编译器(GCC4.2)?

LLVM 3.0 IS Xcode 4.2的系统默认编译器。

我认为您实际询问的是如何在不使用LLVM 3.0时修复错误。为此,您需要将@autoreleasepool替换为NSAutoreleasePool,如下所示:

int main(int argc, char *argv[]) {
    int retVal = 0;

    // @autoreleasepool {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    retVal = UIApplicationMain(argc, argv, nil, NSStringFromClass([iiiAppDelegate class]));

    [pool drain];
    // }

    return retVal;
}

答案 1 :(得分:3)

@autoreleasepool是LLVM 3.0中添加的新功能。它只是无法使用您尝试过的其他编译器。