CLOSE SEARCH

메모리 관리

– 참조 카운트

객체가 alloc 메소드를 통해 메모리를 동적으로 할당받고 이니셜라이저를 통해 초기화를 마치면 해당 객체의 참조카운트는 1이 된다. retain 메시지는 참조 카운트를 1 증가시키고 release는 1 감소 시킨다. 참조 카운트가 0이 되었을 때 객체는 dealloc 메소드를 통해 해제된다.

특정 객체에 retain 메시지를 보내면, 메시지를 보낸 객체는 대상 객체의 오너가 되고, 자신이 대상 객체를 참조하는 동안에는 대상 객체가 해제되지 않는다.

 

– Autorelease Pool

Objective-C는 인스턴스를 자동으로 해제 시켜주는 Autorelease Pool 을 제공한다. NSAutoreleasePool 클래스의 인스턴스를 생성하고 특정 인스턴스에 autorelease 메시지를 보내면 해당 인스턴스는 Autorelease Pool에 등록된다. release 메시지를 보내서 객체를 해제하는 것과 달리 autorelease 메시지를 보내면 객체가 해제되거나 참조 카운트가 변하는 등의 변화는 일어나지 않는다. 대신 Autorelease Pool이 해제되는 시점에 등록된 모든 인스턴스가 해제된다.

 

Autorelease Pool 이 생성되지 않는 상태에서 인스턴스에 autorelease 메시지를 보내면 아래와 같은 메시지와 함께 런타임 에러가 발생한다.

*** __NSAutoreleaseNoPool(): Object 0x100109140 of class NSObject autoreleased with no pool in place – just leaking

Filed under: iOS, Programming Languages