NSAutoreleasePool不可用

Gre*_*reg 29 objective-c nsautoreleasepool

我下面3"在Objective-C编程" 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;
}
Run Code Online (Sandbox Code Playgroud)

任何见解将不胜感激.

bbu*_*bum 39

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

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

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

  • 你的评论“现代化你的例子”让我担心——我也在开始原问题中提到的同一本书,如果书中的第一个例子正在做一些“过时”的事情,它甚至值得继续还是我应该寻找一本新书? (2认同)

Jas*_*ers 16

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

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

  • 单击左侧组织者中的项目.
  • 在下一栏中选择您的目标.
  • 选择顶部的Build Settings选项卡.
  • 向下滚动到"Objective-C自动引用计数"(它可能在用户定义的设置组下列为"CLANG_ENABLE_OBJC_ARC" ),(如果在构建设置下没有找到ARC选项,则可能需要切换编译器.可以在构建设置下找到它)
  • 并将其设置为NO.


Eli*_*rke 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;
}
Run Code Online (Sandbox Code Playgroud)

并将其更改为如下所示:

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