2011-06-17 86 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; 
}