2010-08-12 4 views
2

У меня есть объект, который инициализируется в моем файле nib. Я хочу, чтобы это был синглтон, но также доступный из кода через [myClass sharedInstance];. Сейчас у меня есть это:Вызов объекта singleton, инициированный из nib

static myClass *singleton = nil; 

@implementation myClass 
+ (myClass *)sharedInstance 
{ 
    if (!singleton) singleton = [[self class] new]; 
    return singleton; 
} 

+ (id)alloc 
{ 
    return [self sharedInstance]; 
} 

- (id)init 
{ 
    if ([self class] != nil) 
     self = [super init]) 
    return self; 
} 
@end 

Но alloc никогда не вызывается.

+0

Я не уверен, почему ваш метод 'alloc' не вызван (возможно, вам нужно переопределить' allocWithZone: '), но разве это не будет проблемой? Когда 'alloc' вызывает' sharedInstance', это приведет к другому вызову 'alloc' и так далее бесконечно. – David

+0

Похоже, мне действительно нужно allocWithZone: и что у меня бесконечный цикл. – Jane

+0

Чтобы решить бесконечный цикл, у вас может быть переменная флага, указывающая, был ли один сингл в процессе создания. 'sharedInstance' установил бы его, и' alloc' проверит его. Если он был установлен, 'alloc' будет вызывать' [super alloc] '. – David

ответ