objective c - autoreleasepool이란 무엇입니까?



objective-c nsautoreleasepool (1)

@autoreleasepool 문은 NSAutoreleasePool 클래스를 사용하는 대신 이전과 동일한 작업을 수행합니다. NSAutoreleasePool이 작동하는 방식은 전체 응용 프로그램 전체에 영향을 미치기 때문에 약간 이상했습니다. @autoreleasepool 은 범위가 지정된 영역을 만들고 풀 내 및 배수 할 때 (범위를 벗어날 때) 명확하게 만듭니다. 또한 Apple에 따르면 더 효율적입니다.

autorelease 풀의 개념은 객체 인스턴스가 자동 반복으로 표시 될 때마다 간단합니다 (예 : NSString* str = [[[NSString alloc] initWithString:@"hello"] autorelease]; ), 보유 회수는 + 1로 설정되지만 실행 루프가 끝날 때 풀이 비워지고 autorelease로 표시된 모든 객체는 보유 수를 감소시킵니다. 그것은 그 자체로 그것을 유지할 것이 무엇이든지 준비하는 동안 물건을 유지하는 방법입니다.

ARC를 사용하면 개발자가 autorelease 키워드를 사용하지 않지만 ARC를 관리하는 기본 시스템이 자동으로 키워드를 삽입합니다. ( 기억하십시오 : ARC가 수행하는 모든 작업은 적절한 시간에 retain , release 및 자동 release 호출을 삽입하는 것입니다). 이 때문에 기존 AutoreleasePool 개념을 유지해야합니다.

autorelease 풀을 제거하면 객체가 새기 시작합니다.

참고로 계산 된 환경에서 Cocoa는 항상 자동 복구 풀이 제공 될 것으로 기대합니다. 풀을 사용할 수없는 경우 자동 출시 개체가 해제되지 않고 메모리가 누수됩니다. 이 경우 프로그램은 일반적으로 적절한 경고 메시지를 기록합니다.

가능한 중복 :
왜 자동 복구 풀을 사용합니까?

모든 Objective-C 시작 페이지는 주 함수 선언 아래에 기본 @autoreleasepool{...} 문으로 열립니다. 그러나 실제로이 진술은 무엇입니까? 새로운 Objective-C는 객체를 자동으로 해제하고 행을 삭제하면 프로그램에 아무런 변화가 없습니다. 이 명령이 정말로 필요한 것입니까?





nsautoreleasepool