我正在遵循" 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是启用的。我知道如何启用或不启用它的唯一方法是当你第一次创建程序时。