2011-03-06 5 views
5

iOS/CocoaTouch에서 나는 종종 메서드 내에서 NSAutoreleasePool의 새로운 인스턴스를 만드는 코드를 보았습니다. 나는 최근에 NSOperation에서 하나를 보았습니다.NSAutoreleasePool. 언제 새로운 자동 풀 풀을 만드는 것이 적절한가요?

NSAutoreleasePool의 새 인스턴스를 설정하기위한 기본 규칙은 무엇입니까? main.m에서 생성 된 기존의 릴리스 풀에 단순히 의존하는 것이 더 좋은 이유는 무엇입니까? 당신이 원하는 때마다

감사합니다,
더그

답변

6

당신은 새로운 오토 릴리즈 풀을 사용할 수 있지만 항상 도움이되지 않습니다. 새 스레드를 시작할 때마다 또는 해당 스레드에서 자동으로 렌더링 된 객체가 유출 될 때마다 필요합니다. 많은 수의 객체를 만들고 자동 해제하는 방법으로 새로운 자동 릴리스 풀을 만드는 것도 일반적입니다. 예를 들어 50 개의 반복마다 10 개의 객체를 만든 루프가있는 경우 루프의 일부가 아닌 경우 해당 메소드에 대한 자동 실행 풀 만들기를 고려하여 반복마다 새 객체가 만들어 지도록해야합니다.

+0

로컬 자동 릴리스 풀이 언제 유용하지 않습니까? 나는 하나의 창작을위한 동기를 모으고있다. 또한 새 스레드에 대해 새 자동 릴리스 풀을 만들어야한다고 명시했습니다. NSOperations에서도 마찬가지입니까? 나는 광신적 인 테스터이며 로컬 autorelease pool이없는 현재의 NSOperations에 mem 누수가없는 것을 보았다. – dugla

+0

@dugla NSOperations를 만들 필요가 있는지 확실하지 않습니다. 객체가 풀없이 자동 릴리즈되면 콘솔에 메시지를 출력하므로 필요할 경우 알려야합니다. 추가 할당을 추가하고 프로세서 사이클을 사용하기 때문에 수명이 다할 때 많은 오브젝트를 작성하지 않으면 풀 작성이 도움이되지 않습니다. 다른 객체가 그것을 사용하지 않기 때문에 당신이 평생 동안 objective-c 객체를 사용하지 않는다면 어떤 이점도 얻을 수 없습니다. – ughoavgfhw

3

아직 풀이없는 경우 (새 스레드와 같은 경우) 또는 실행 루프에있는 풀이 충분하지 않은 경우 풀을 만듭니다 (많은 경우 실행되는 루프에서 자동 반복 실행되는 객체 생성). 반복)을 사용하거나 생성 한 자동 렌더링 된 오브젝트가 궁극적으로 릴리스 될 때 제어력을 강화하려는 경우에 유용합니다.

1

iOS 4.3에서 테스트했으며 performSelectorInBackground를 실행할 때 자체 자동 풀 풀을 만들어야합니다. NSOperation 또는 dispatch_async를 사용할 때 생성 할 필요가 없습니다.

iOS> = 5.0으로 보입니다. performSelectorInBackground를 사용하더라도 시스템이 자동으로 자동 복구 풀을 생성하므로 자동 복구 풀을 만들어야 할 경우를 찾을 수 없습니다.

변경 내용을 찾을 수 없습니다.