2011-06-17 105 views
2

当我创建的XCode 4.2(单一视图iOS应用,例如)的main.m文件,文件中的“支持文件” - 文件夹一个新的项目看起来像:的XCode 4.2编译器错误

#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)?

回答

3

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

+0

我怎样才能重置的选项,这为新项目自动生成的代码是可编译与GCC 4.2? – Benny 2011-06-17 07:16:02

+0

不知道这是否可能 - 也许模板是这样制作的(但没有选中)。这现在接近NDA,更好的问问developer.apple.com – Eiko 2011-06-17 07:19:35

6

要回答你的第一个问题:

哪种设置在我的Xcode会引起这样的麻烦?

编译器本身就是设置。将其更改为LLVM 3.0并没有更多的麻烦

要回答你的第二个问题:

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

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

我想你是什么其实问是如何解决不使用LLVM 3.0时的错误。要做到这一点,你想用NSAutoreleasePool更换@autoreleasepool像这样:

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; 
}