2011-07-28 4 views
3

autorelease는 블록의 끝에서 객체가 해제된다는 것을 보장합니까?객관적인 C - 메모리 관리 및 autorelease ???

개체를 수동으로 해제하는 것이 더 좋습니까?

+1

나는이 도움이 될 수 있습니다 생각 - http://stackoverflow.com/questions/3433274/objective-c-autorelease – jBit

답변

7

블럭이 실행 된 후에 언젠가는이 출시 될 것이라는 것을 보장합니다. 정확한시기를 결정하는 것은 런타임에 달려 있습니다.

커다란 루프로 작성하거나 UIImages와 같은 대규모 자동 반복 객체를 생성하는 등의 많은 자동 반복 변수를 사용하지 않는 한 큰 문제는 아닙니다. 이러한 경우에는 통과 할 때 수동으로 해제해야합니다. 그렇지 않으면 autorelease가 완벽하게 허용됩니다.

+1

+1, 하나 개의 중요한 지점을 언급하는 유일한 대답을 autoreleasing의 방출 것을 의미 이 질문에 : ** 블록 ** – sidyll

1

개체가 autorelease d 인 경우 수동으로 release이 아니어야합니다 (물론 retain 인 경우 제외). UIKit 이벤트 처리기의 일부인 NSAutoRelease 풀은 release입니다. 객체를 수동으로 release으로 만들면 객체가 이중으로 release d 일 때 풀에서 충돌 또는 기타 정의되지 않은 동작이 발생할 수 있습니다.

당신이 객체를 많이 생성 또는 객체의 메모리를 많이 사용하는 경우가있는 경우, 당신은 선제 수 있습니다 그들 (아마 당신 루프) autorelease를 자신의 NSAutoReleasePool 만들어 - 중첩 될 수 있습니다 풀.

+0

그래, 난 수동으로 대신 – aryaxt

0

물론 autorelease를 사용하는 명백한 이유가있는 경우가 아니라면 autorelease보다는 객체를 해제하는 것이 좋습니다. 예를 들어 메소드가 유지되는 객체를 반환 할 때 autorelease를 사용하면 피할 수 없습니다.

기본적으로 자동 복구는 메모리 관리를 완전히 피하기위한 구실로 사용해야합니다. 가능한 한 빨리 객체를 해제하려고합니다. Autorelease는 개체가 앞으로 언젠가 릴리스 될 것이라고 말합니다.