Release 2

[iOS] Autorelease Pool과 메모리 관리

Autorelease pool은 객체가 즉시 해제되는 가능성을 피하고자 할 때, 객체에 대한 소유권을 포기하도록 하는 메카니즘이다. autorelease pool은 '@autoreleasepool'이라는 키워드로 사용한다. 블록안 에서 autorelease 메시지를 받은 객체들은 '@autoreleasepool'로 선언한 블록의 끝에서 release 메시지를 받는다. 일반적으로 autorelease 메시지는 객체를 할당한 구역 밖에서 객체를 해제하고자 할때, 컴파일러에게 이를 알리고자 사용하는 메시지이다. 하지만 autorelease 메시지는 객체가 언제 해제되는지 불명확해 진다. autorelease pool은 이런 autorelease 객체가 해제되는 시점을 명시적으로 보여준다. 즉 autorelea..

[iOS] Automatic Retain Counting (ARC) in Objective-C & Swift

Automatic Retain Counting (ARC) Objective-C와 Swift에서 사용하는 메모리 관리 방법으로, retain count를 추적해야하는 번거로움을 개발자가 아닌 컴파일러에게 일임하는 것이다.본래의 Objective-C에서는 'retain'과 'release' 메시지를 사용함으로써 객체를 해제할지 말지를 표시했다. ARC에서는 컴파일러가 소스코드를 검사하여 컴파일된 코드 안에 'retain'과 'release' 메시지를 추가한다. ARC가 코코아의 garbage collection과 다른 점은 객체를 해제하기 위한 background-process가 별도로 존재하지 않는다는 점이다. 그리고 ARC는 Retain Cycle에 대해 자동적으로 대응할 수 없다. 그래서 개발자는 'w..