【问题标题】:XCode 4.2 Compiler ErrorXCode 4.2 编译器错误
【发布时间】:2011-06-17 05:36:07
【问题描述】:

当我使用 XCode 4.2(例如单视图 iOS 应用)创建一个新项目时,“支持文件”文件夹中的 main.m 文件如下所示:

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

【问题讨论】:

    标签: objective-c xcode llvm


    【解决方案1】:

    回答你的第一个问题:

    我的 Xcode 中的哪个设置会导致这样的问题?

    编译器本身就是设置。改成 LLVM 3.0 就不用麻烦了

    回答你的第二个问题:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我怎样才能重置选项,新项目的自动生成代码可以用 GCC 4.2 编译?
      • 不确定这是否可能——也许模板就是这样制作的(但尚未检查)。现在接近 NDA,最好在 developer.apple.com 上询问
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多