객체 중에는 해제 하면 안되는 객체도 있습니다.
예를 들어 클래스 객체(Objective-C에서는 클래스자체도 객체로 취급합니다. main 함수가 시작될때 인스턴스화 됩니다.)나 하나의 인스턴스만 만들어서 공유 하는 경우 혹은  NSString 문자열에 있는 것과 같은 객체 상수입니다.

이들 객체에 메세지 retainCount를 보내면 UINT_MAX라는 리턴값이 돌아 옵니다.
이것은 C언어 표준 라이브러리의 헤더 limits.h에서 정의된 unsigned int의 최대값 입니다.

해제 하면 안되는 객체를 정의 할 때는 클래스 정의에서 retain, release, 그리고 retainCount를 오버라이드 합니다.

구체적으로는 retain과 realease, autorealease가 아무것도 하지 않도록 오버라이드해서 레퍼런스 카운트 값이 변경 되지 않도록 합니다. 동시에 retainCount가 UINT_MAX를 리턴 하도록 만듭니다. 단 일반 적인 프로그램에서는 이렇게 정의 하는 일은 거의 없습니다.

하나의 인스턴스만 만들어서 사용하는 설계 방식을 디자인 패턴에서는 싱글톤 이라고 부릅니다. Cocoa 프레임워크에서도 이런 형태의 객체가 몇가지 있습니다. 예를 들어 애플리케이션을 제어하는 NSApplication의 객체 외에도 컬러 패널이나 프론트 패널도 하나의 객체가 공유 됩니다. 이들 클래스 에서는 shared...로 시작하는 클래스 메소드가 공유 되고 있는 유일한 인스턴스를 리턴 하도록 구현되어 있습니다.

Posted by 배고파씨