Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSAutoreleasePool不可用_Objective C_Nsautoreleasepool - Fatal编程技术网

Objective c NSAutoreleasePool不可用

Objective c NSAutoreleasePool不可用,objective-c,nsautoreleasepool,Objective C,Nsautoreleasepool,我正在关注Objective-C第三版中的编程,我对第一个示例有问题 我不断地发现这个错误: 语义问题:“NSAutoreleasePool”不可用:在中不可用 自动参考计数模式 这是我的密码: // // main.m // prog1 // // Created by Steve Kochan on 1/30/11. // Copyright 2011 ClassroomM, Inc.. All rights reserved. // #import <Foundation/Foun

我正在关注Objective-C第三版中的编程,我对第一个示例有问题

我不断地发现这个错误:

语义问题:“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;
}

如有任何见解,将不胜感激

要求编译器编译启用ARC自动引用计数的文件。关闭该选项,或者更好地使您的示例现代化:

int main (int argc, const char * argv[]) {
    @autoreleasepool {
        NSLog (@"Programming is fun!");
    }
    return 0;
}
不,我不能告诉你具体如何关闭ARC,如果这是由于上述保密协议而导致的路线。

以下是苹果公司的ARC过渡指南

好的,退房。对NSAutoreleasePool的具体更改-这是创建第一个应用程序时Xcode初始化自身的方式。我不知道你的情况,但我喜欢这个主意


如果你按照Kochan的书去做,不用担心。启动项目时,只需取消选中“使用圆弧”框。一切都会好的。

快速发帖,以防你还在看

可以在生成设置中禁用圆弧

在左侧的“管理器”中单击项目。 在上面的下一列中选择您的目标。 选择顶部的“生成设置”选项卡。 向下滚动至Objective-C自动参考计数,可能是 在用户定义的设置下列为CLANG_ENABLE_OBJC_ARC 组,如果在“生成设置”下找不到“圆弧”选项,则可能需要 来切换您的编译器。您可以在“生成设置”下找到它 并将其设置为否。
首次创建新项目时,将启用ARC。好的,我知道如何启用或不启用它的唯一方法是在您第一次创建程序时。这是您必须取消选中的复选框之一。

在我的例子中,我希望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]));
    }
}
并将其更改为如下所示:

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]));
    }
}

请查看您是否可以阅读自己的问题-代码需要标记为code不是NDA下的Lion预览版吗?您还不能在这里问这个问题,因为Lion SDK在NDA下。ARC不在NDA下,尽管Lion和iOS 5在NDA下。不;这是一个真正的问题,可以在这里得到回答。小心已编辑的问题不再有任何NDA'd错误。非常感谢!非常感谢。你的评论使你的例子现代化让我感到担忧——我也在开始阅读原问题中提到的同一本书,如果书中的第一个例子做了一些过时的事情,是否值得继续,或者我应该找一本新书?知识仍然适用。即使使用ARC,了解手动保留/释放的详细信息仍然很有用。见鬼,即使你只打算写一个iOS应用程序,你仍然会从了解其他语言中获益。但是,是的,这本书记录了不再是最现代的模式。@bbum发行时也有类似的问题。如何“现代化”:self.window=[[UIWindow alloc]initWithFrame:screenbunds]autorelease];如果这很简单,我深表歉意,但我只是将XCode用于PhoneGap项目,所以我对Objective C内存管理知之甚少这为我在OS X Lion上修复了它-谢谢Jason!@JasonRogers的回答是错误的吗?他告诉我们如何离开?