인스턴트 싱글 톤을 갖기 위해 서브 클래스를 작성할 수있는 클래스를 작성하려고합니다. 여기 내가 지금까지 가지고있는 것이있다. 그것은 하나의 서브 클래스가 sharedInstance를 통해 또 다른 서브 클래스를 호출 할 때까지 작동하여 결국에는 메모리가 부족한 거대한 루프가 발생합니다.Objective-C 싱글턴 슈퍼 클래스?
아이디어가 있으십니까?
static NSMutableDictionary *sharedInstances = nil;
@implementation Singleton
+ (Singleton*)sharedInstance
{
[Singleton initSharedInstances];
Class myClass = [self class];
Singleton * sharedInstance = [sharedInstances objectForKey:myClass];
@synchronized(myClass)
{
if (sharedInstance == nil)
{
sharedInstance = [[myClass alloc] init];
[sharedInstances setObject:sharedInstance forKey:myClass];
}
}
return sharedInstance;
}
+ (void) initSharedInstances
{
if (sharedInstances == nil)
{
sharedInstances = [[NSMutableDictionary alloc] init];
}
}
@end
가 완전히 동의 ... 무한 재귀가 발생하지한다 싱글 톤 클래스의 메소드를 오버라이드하는 것이 일반적으로 다소 어리 석다는 것을 알았습니다. 당신이 모르는 무수한 사람들이 사용하게 될 프레임 워크에서 어떤 클래스에서는 의미가있을 수도 있습니다. 너 자신을 위해서? 그것을 간단하게해라! – bbum
나는 약간 더 방어적인 패턴을 제공하기 위해 케빈의 코드를 편집했다. init에서 alloc을 분리하는 것이 유용 할 수있는 몇 안되는 시간 중 하나입니다. '-init' 메쏘드가'+ sharedInstance'에 대한 호출을 트리거한다면, 원래의 코드는 스스로 교착 상태가됩니다. – bbum
좋은 지적입니다. '-init'가'+ sharedInstance'를 호출하는 곳에서는 코드를 작성한 적이 없지만, 필자는 그것이 일어난 것을 확실히 상상할 수 있습니다. –