当我使用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)?
答案 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中添加的新功能。它只是无法使用您尝试过的其他编译器。