objective-c - @autoreleasepool 在@token 之前期望表达式

标签 objective-c ios automatic-ref-counting nsautoreleasepool

我有一个使用 ARC 的 iOS 项目,我收到了一个与我创建应用程序的@autoreleasepool 的方式相关的错误。

在 main.m 中,我有一小段代码:

#import <UIKit/UIKit.h>

int main(int argc, char *argv[]) {
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, @"MyAppDelegate");
    }
}

我收到错误信息:
错误:“@”标记前的预期表达式

但是,如果我恢复到创建自动释放池的旧方式:

#import <UIKit/UIKit.h>

int main(int argc, char *argv[]) {

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    int retVal = UIApplicationMain(argc, argv, nil, nil);
    [pool release];
    return retVal;
}

我在 IDE 中收到与 ARC 相关的各种错误:

  1. NSAutoreleasePool不可用:在自动引用计数模式下不可用
  2. ARC 禁止发送“release”的显式消息

然而,当我尝试构建时,它构建成功。

冲突在哪里?
如何让它使用创建自动释放池的新样式?

最佳答案

确保您设置为使用 Clang 编译器 (Apple LLVM) 而不是 GCC:

enter image description here

然后像这样写你的main.m:

#import <UIKit/UIKit.h>

#import "AppDelegate.h"

int main(int argc, char *argv[])
{
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

关于objective-c - @autoreleasepool 在@token 之前期望表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13708601/

相关文章:

objective-c - 我如何使用 [NSAlert beginSheetModalForWindow :completionhandler:] on older versions of OS X

ios - 如何以编程方式扩展/调出搜索栏?

c++ - 在启用 ARC 的情况下使用 reinterpret_cast

ios - 用 Metal 渲染四边形性能

ios - 在没有 Storyboard的情况下启动 ios 项目

ios - Xcode 4.4,使用 ARC 为 iOS 4.2 构建应用程序

objective-c - xcode中项目/目标的单独设置是什么意思?

iphone - 适用于 iPhone 的备忘录应用程序

objective-c - 使用大小初始化 NSArray

iphone - 如何在 UITextView 上点击 url/email/phone number