NSAutoreleasePool不可用

时间:2011-07-11 20:04:17

标签: objective-c nsautoreleasepool

我正在关注“Objective-C编程”3 rd 版本,我遇到第一个例子的问题。

我一直收到这个错误:

  

语义问题:'NSAutoreleasePool'不可用:不可用   自动参考计数模式

这是我的代码:

//
// main.m
// prog1 //
// Created by Steve Kochan on 1/30/11.
// Copyright 2011 ClassroomM, Inc.. All rights reserved. //

#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    NSLog (@"Programming is fun!");
    [pool drain];
    return 0;
}

任何见解都将受到高度赞赏。

5 个答案:

答案 0 :(得分:39)

要求编译器在启用ARC(自动引用计数)的情况下编译文件。关闭它,或者更好地使你的例子现代化:

int main (int argc, const char * argv[]) {
    @autoreleasepool {
        NSLog (@"Programming is fun!");
    }
    return 0;
}

(不,我不能告诉你如何关闭ARC,如果这是你因为上述NDA而失败的路线。)

答案 1 :(得分:16)

快速发布,以防您仍在寻找

您可以在构建设置中禁用ARC。

  • 在左侧管理器中单击您的项目。
  • 在下一栏中选择您的目标。
  • 选择顶部的构建设置标签。
  • 向下滚动到“Objective-C自动参考计数”(可能是 在用户定义的设置下列为“CLANG_ENABLE_OBJC_ARC” group),(如果在构建设置下没有找到ARC选项,则可能需要 切换你的编译器。你可以在构建设置下找到它)
  • 并将其设置为NO。

答案 2 :(得分:5)

在我的情况下,我想要ARC,并希望更新示例项目以正常工作。 Apple的NSAutoReleasePool文档在技术上是正确的,但不要直接解释这一点。方法如下:

将您的应用程序设为main,可能看起来像这样:

int main(int argc, char *argv[])
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    int retVal = UIApplicationMain(argc, argv, nil, NSStringFromClass([DemoAppDelegate class]));

    [pool release];

    return retVal;
}

并将其更改为:

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

答案 3 :(得分:3)

以下是Apple向ARC过渡指南的link

好的......检查this。对NSAutoreleasePool的具体更改 - 这是Xcode在您创建第一个应用程序时初始化的方式。我不了解你,但我喜欢这个想法!

如果您跟随Kochan的书,请不要担心。启动项目时,只需取消选中“使用ARC”框。一切都会奏效。

答案 4 :(得分:-1)

首次创建新项目时启用ARC。正确知道我知道如何启用或不启用它的唯一方法是在您第一次创建程序时。这是您必须取消选中的复选框之一。