objective c - NSAutoreleasePool을 사용할 수 없습니다.




objective-c (4)

나는 "Programming in Objective-C"제 3 판을 따르고 있는데 첫 번째 예제에 문제가있다.

계속이 오류가 발생합니다.

시맨틱 문제 : '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는 처음에 새 프로젝트를 만들 때 활성화됩니다. 내가 프로그램을 만들 때 활성화 또는 비활성화하는 방법을 알고있는 유일한 방법을 알고 있습니다. 선택을 취소해야하는 확인란 중 하나입니다.


다음은 Apple의 ARC 전환 가이드 link 입니다.

OK ... this 봐. NSAutoreleasePool에 대한 특정 변경 - 첫 번째 앱을 만들 때 Xcode가 초기화되는 방식입니다. 나는 너에 대해서 모른다. 그러나 나는이 생각을 사랑한다!

Kochan의 책을 따라 가면 걱정할 필요가 없습니다. 프로젝트를 시작할 때 "ARC 사용"상자의 선택을 취소하십시오. 모든 것이 효과적입니다.


컴파일러에서 ARC (자동 참조 계산)를 활성화하여 파일을 컴파일하라는 메시지가 표시됩니다. 이것을 없애거나, 더 나아가, 당신의 모범을 현대화하십시오 :

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

(아니, 전술 한 NDA로 인해 내려야하는 경로 인 경우 ARC를 끄는 방법을 구체적으로 말할 수 없습니다.)


필자의 경우, ARC를 켜고 싶었고 샘플 프로젝트를 업데이트하여 제대로 작동시키고 싶었습니다. Apple의 NSAutoReleasePool 문서는 기술적으로는 정확하지만 곧바로 설명하지는 않습니다. 방법은 다음과 같습니다.

애플리케이션 메인을 가져다가 다음과 같이 보일 것입니다 :

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






nsautoreleasepool