Sunday, October 31, 2010

[iOS] About 'autorelease'

autorelease.

Obj-C 로 개발하다가, 최초에 가장 헷갈렸던 개념중에 하나 인데,

autorelease라는 keyword탓이기도 하고, 지금 생각해보면, Apple탓이기도 한데,

"GC 가 알아서 해결해줄것임" 이라고 오해하기가 쉬운것 같다.


쉽게 얘기하면, autorelease를 특정 object에 걸어주면, release하는 시점을 연기한다고 이해 하면 된다.

그럼, 연기된 'release'가 언제 수행되는가 ?

그것을 알려면 NSAutoReleasePool 이라는 녀석을 알아야 한다.

object에 autorelease를 걸면,
current NSAutoReleasePool에 쌓이게 되고, NSAutoReleasePool이 Release될때, 함께 릴리즈 된다.

NSAutoReleasePool 은 Objective-C runtime에 의해 관리 되는데,
NSAutoReleasePool Object를 생성하게 되면, Stack처럼 쌓이게 되고,
top 에 있는 object가 current NSAutoReleasePool이 된다.

그래서 autorelease 를 많이 사용하는 application을 개발하면,
이 NSAutoReleasePool 관리에도 신경을 써서 개발해야만 한다.

No comments:

Post a Comment