어떤 클래스의 인스턴스를 공용으로 만드는 것은 사실 알게 모르게 많이 사용하고 있는 패턴이다. 예를 들어 [NSFileManager defaultManager] 라든가 [UIApplication sharedApplication], [NSNotificationCenter defaultCenter] 같은 것들이 공용 인스턴스가 될 것이다.
이는 싱글톤이라는 패턴이라고 하는데, 그러니까 단 하나만 존재한다는 뭐 그런 의미겠지. 암튼 싱글톤을 만드는 방법은 좋은 점도 있겠지만 글로벌하게 접근하는 객체를 위해서 만들기에는 좀 부담스럽지 않은가 하는데, 아래와 같은 방법을 통해 (이는 전통적인 싱글톤 구현방법은 아니라고 한다.) 손쉽게 만들 수 있다. 이는 코드를 그대로 가져다 붙이기만 하면 되고, 빠르고, ARC의 적용을 받으며, 멀티스레드 환경에서도 안전하게 동작한다.
+(id)sharedInstance { static dispatch_once_t pred = 0; __strong static id _sharedObject = nil; dispatch_once(&pred, ^{ _sharedObject = [[self alloc] init]; }); return _sharedObject; }
싱글톤에 대한 애플 개발자 문서의 설명은 다음과 같다.
싱글톤 클래스는 애플리케이션에서 얼마나 요청하든 상관없이 하나의 인스턴스만을 만드는 클래스이다. 주로 앱의 자원에 액세스하는 글로벌 인터페이스를 만드는데 사용될 수 있다. 예를 들어 다른 객체에 사운드를 제공하는 클래스를 만들었다면 이를 싱글톤으로 활용하면 된다.
- 애플 개발자 문서 : 싱글톤
- 참고자료 : CGD를 통한 싱글톤 구현
- 출처 : A note on Objective-C singletons