2012-09-16 5 views
3

나는 (내가 잘못 본 것이 아니라면) @autoreleasepool 문을 사용하여 일부 코드를 래핑하여 ARC를 사용하는 책을 읽었습니다. 우선이 경우입니까?목표 C @autoreleasepool 지시문

두 번째 우려는 새 프로젝트를 만들 때 ARC를 사용할 수 있지만 일부 iOS 예제 프로그램을 수행 할 때 발생합니다. 자동으로 생성 된 코드에서이 지시어가 어디에도 사용되지 않습니다. ARC가 사용되지 않는다는 의미입니까? 모든 아이디어/포인터는 높이 평가됩니다. @autoreleasepool 문을 몇 가지 코드를 포장

답변

4

@autoreleasepool은 ARC를 "활성화"하지 않습니다. autorelease 풀을 사용하는 것은 ARC 방법 일뿐입니다.

는 ARC하기 전에,이 같은 오토 릴리즈 풀을 설정하는 NSAutoreleasePool 클래스를 사용 :

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
// Code benefitting from a local autorelease pool. 
[pool release]; 

을하지만 당신은 ARC를 사용하는 경우 release 전화를 허용하지 않는, 그래서 대신 새로운 방법은 오토 릴리즈 풀을 사용하는 도입 :

@autoreleasepool { 
    // Code benefitting from a local autorelease pool. 
} 

@autoreleasepool 블록 직접 NSAutoreleasePool의 인스턴스를 이용하여보다 효율적이고; ARC를 사용하지 않아도 사용할 수 있습니다.

2

호 ARC는 컴파일러 플래그에 의해 활성화되어 ARC 수 있습니다. @autoreleasepool은 ARC를 사용하는 경우에도 자동 복구 풀을 만드는 데 사용되는 키워드 일뿐입니다 (일반적으로 alloc-init 및 release를 사용하여 만들고 삭제할 것이지만 ARC 아래에 명시적인 release 메시지를 보낼 수 없음) 키워드가 도입되었습니다.)

그리고 Xcode /에서 컴파일러/ARC를 사용하면 ARC가 활성화됩니다. 물론, "autorelease everything"원칙보다 나은 해결책이 있으며, 이는 예제 코드에서이 키워드를 만나지 않은 원인 일 수 있습니다.

4

먼저 책이 잘못되었습니다. @autoreleasepool은 ARC와 직교합니다. ARC없이 autoreleasepools를 사용할 수 있으며 autoreleasepools없이 ARC를 사용할 수 있습니다 (그러나 그렇게해서는 안됩니다).

둘째, Xcode의 기본 프로젝트를 사용하여 생성 된 프로젝트의 메인 스레드는 자동 복구 풀이 만들어집니다. 생성 한 모든 스레드는 자체 자동 릴리스 풀을 만들어야합니다.

2

새 프로젝트를 만들 때 ARC를 사용할 수 있지만 일부 iOS 예제 프로그램을 수행 할 때 두 번째 관심사는이 지시어가 어디에서나 (자동 생성 된 코드에서) 사용되는 것을 결코 보지 못합니다. ARC가 사용되지 않는다는 의미입니까? 모든 아이디어/포인터는 높이 평가됩니다.

응용 프로그램에서 이것을 사용합니다. 프로젝트의 main.m 파일을 확인하십시오. 거기에서 찾을 수 있습니다.