目标c - NSAutoreleasePool不可用



我正在遵循" Objective-C编程" 3rd版本,我在第一个例子中遇到了问题。

我一直得到这个错误:

语义问题:'NSAutoreleasePool'不可用:not available in自动引用计数模式

下面是我的代码:
//
// 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;
}

任何见解将不胜感激。

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

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

(不,我不能告诉你如何,具体地,关闭ARC,如果这是你要走的路线,由于上述NDA。)

如果你还在寻找

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

  • 点击你的项目,在左边的管理器。
  • 在下一列中选择您的目标。
  • 选择顶部的Build Settings选项卡。
  • 向下滚动到"Objective-C自动引用计数"(可能是)在用户定义的设置下列出为"CLANG_ENABLE_OBJC_ARC"组),(如果您在构建设置下没有找到ARC选项,您可能需要来切换编译器。你可以在build settings下找到它
  • ,设置为NO。

在我的情况下,我想要ARC,并希望更新一个示例项目,以正常工作。苹果的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]));
    }
}

这是苹果向ARC过渡指南的链接。

好吧…看看这个。NSAutoreleasePool的具体改变-这是Xcode在你创建第一个应用程序时初始化自己的方式。我不知道你是怎么想的,但我喜欢这个想法!

如果你在看w/Kochan的书,不用担心。当开始你的项目时,取消勾选"使用ARC"框。

当您第一次创建一个新项目时,ARC是启用的。我知道如何启用或不启用它的唯一方法是当你第一次创建程序时。

相关内容

  • 没有找到相关文章

最新更新