3

ARC を使用する iOS プロジェクトがあり、アプリの @autoreleasepool の作成方法に関連するエラーが表示されます。

main.m には、次のような小さなコード スニペットがあります。

#import <UIKit/UIKit.h>

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

そして、次のエラー メッセージが表示されます:
エラー: '@' トークンの前に式が必要です

ただし、autoreleasepool を作成する古いスタイルに戻すと、次のようになります。

#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 は「リリース」の明示的なメッセージ送信を禁止します

ただし、ビルドしようとすると、正常にビルドされます。

紛争はどこにありますか?
自動解放プールを作成する新しいスタイルを使用するにはどうすればよいですか?

4

1 に答える 1

2

GCC ではなく、Clang コンパイラ (Apple LLVM) を使用するように設定されていることを確認してください。

ここに画像の説明を入力

次に、これと同様に main.m を記述します。

#import <UIKit/UIKit.h>

#import "AppDelegate.h"

int main(int argc, char *argv[])
{
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}
于 2013-01-20T17:34:22.013 に答える