싱글 톤 인스턴스를 만들 때 일부 메서드를 재정의하는 코드 스 니펫 (CocoaFundamentals 가이드에 있음)으로 약간 혼란 스럽습니다.애플 싱글턴 예제 쿼리?
static id sharedReactor = nil;
+(id)sharedInstance {
if(sharedReactor == nil) sharedReactor = [[super allocWithZone:NULL] init];
return sharedReactor;
}
. 싱글 인스턴스가 + sharedInstance 방법을 생성 된 코드에서
+(id)allocWithZone:(NSZone *)zone {
return[[self sharedInstance] retain];
}
-(id)retain {
return self;
}
는 [슈퍼 allocWithZone을 : NILL] 호출하는 슈퍼 클래스에서 (내 경우 NSObject의 인) 당신이 그것을 사용하려고하면 allocWithZone 위에만 호출됩니다 새 싱글 톤을 만들 수 있습니다.
혼란 스러울 정도의 비트는 보유를 사용하는 것입니다. 특히 보유를 보는 것 또한 자기를 되돌리기 위해 무시됩니다. 사람이 설명 할 수, 그것은 쓸 수 없습니다 :
+(id)allocWithZone:(NSZone *)zone {
return [self sharedInstance];
}
-(id)retain {
return self;
}
EDIT_001 : I (아래 참조) 나는이 다음에 가기로 결정했다 웹에 대한 의견 독서 다양한 게시물을 바탕으로
필요한 경우 두 번째 또는 세 번째 인스턴스를 만들 수있는 옵션이있는 공유 싱글 톤 접근 방식을 선택했습니다. 또한이 단계에서는 간단한 iPhone 앱의 MVC 모델 부분에 싱글 톤 만 사용하므로 스레드 안전을 유지하기로했습니다. 나는 그것의 중요성을 잘 알고 있으며, 아이폰 프로그래밍에 익숙해 져서 (아마도 두 번 호출 될 수있는 서브 클래스 문제를 염두에 두면서) 초기화 대신에 + 초기화를 사용할 것이다. 또한 dealloc을 추가했다. 싱글 톤 (singleton)이 더 이상 필요하지 않으면 제대로 정리해야합니다.
@interface SharedManager : NSObject
+(id)sharedInstance;
@end
@implementation SharedManager
static id myInstance = nil;
+(id)sharedInstance {
if(myInstance == nil) {
myInstance = [[self alloc] init];
}
return myInstance;
}
-(void)dealloc {
NSLog(@"_deal: %@", [self class]);
[super dealloc];
myInstance = nil;
}
@end
테스트에서 I는 I가 할당 해제에 세트를 정적 변수 전무했다 또는 원래의 객체에 대한 포인터를 유지하였습니다. 처음에는 인스턴스의 정적 범위를 기대하고 있었기 때문에 약간 혼란 스러웠습니다. 대신 클래스를 추측 해 봅시다.
환호 게리
는
스레드 안전성을 논의하기 위해이를 업데이트 할 수 있습니다. 마이크 애쉬 (Mike Ash)는 다른 싱글 톤 문제와 관련하여 좋은 소식을 가지고 있습니다. http://www.mikeash.com/pyblog/friday-qa-2009-10-02-care-and-feeding-of-singletons.html – nall
더 나은 : 독자들은 Mike Ash의 게시물을 확인해야합니다. 이것은 thread-safety를 위해 이것을 확장하는 방법에 대해 매우 철저합니다. 공유 싱글 톤에 대한 스레드 안전성 문제는 초기 생성에만 영향을 미칩니다. 내가 쓰레딩을 일반적으로 처리하는 방법 때문에이 종류의 스레드 문제가 발생하는 것은 매우 드물다 (내 코드에서 싱글 톤의 첫 번째 사용이 작업자 스레드에있을 가능성은 매우 낮다). 즉, 구현하기에 너무 싸기 때문에 Mike가 초기화를 사용하는 유혹을 받는다. 그리고 나는 "너무 초기 init"문제가 대부분의 상황에서는 일어나지 않을 것이라고 생각한다. –
@Rob 여전히 여러 인스턴스를 허용하지 않습니다. 그것은 대회에서 그들을 "허용하지 않는다". Peter Hosey는 싱글 톤을보다 적절하게 구현하는 방법에 대한 훌륭한 글을 올렸습니다. http://boredzo.org/blog/archives/2009-06-17/doing-it-wrong –