코코아는 reference counting이라는 방법을 사용하는데 이는 retain counting이라고도 불릴때 도 있다.
모든 객체는 그 객체의 유지 횟수, 즉 참조횟수라고 하는 정수 값을 가지고 있다. 어떤 코드에서 그 객체를 사용하고 있다면 그 코드는 객체의 참조 횟수를 증가시켜 ⎡이 객체가 사용되고 있다⎦ 라고 알려준다. 그 코드가 객체 사용을 다 끝내면 참조 횟수를 줄여서 객체가 더 이상 사용되지 않음을 알려준다. 참조 횟수가 0이 되면 아무도 그 객체를 사용하지 않게 되므로 소멸되고, 객체가 사용했던 메모리를 시스템에 반환하게 된다.
참조 횟수가 0이 되어 객체가 소멸되려고 할 때 Objective-C는 자동적으로 dalloc 메시지를 해당 객체에게 보낸다. 이는 소멸자 정도라고 생각해도 되고 ~로 시작되는 C++ 의 소멸자를 오버라이드 할 수 있듯이 이도 오버라이드 가능하다. 당연한 거다;
dealloc을 직접 호출 하면 안된다. 객체가 소멸될 때는 Objective-C가 자동 적으로 호출한다. 현재 참조 횟수를 알아내기 위해서는 retainCount 메시지를 객체에 보내면 된다.
- (id) retain;
- (void) release;
- (unsigned) retainCount;
retain은 id를 반환한다. 그렇게 함으로써 참조 호출의 반환 값으로 다른 메시지를 보낼수 있다. 그리고 참조 횟수를 증가시키고 나서 다른 작업을 바로 요청할 수 있다. 예를 들어 [[car retain] setTire: tire atIndex:2];은 car의 참조횟수를 증가시키고 setTire:atIndex: 작업을 진행한다.
- 이 글은 Apress Bj 퍼블릭의 아이폰과 맥 OS X 개발을 위한 오브젝티브-C 2.0 이라는 책의 9장. 메모리 관리에서 참조하였다.