У меня есть объект, который инициализируется в моем файле 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
никогда не вызывается.
Я не уверен, почему ваш метод 'alloc' не вызван (возможно, вам нужно переопределить' allocWithZone: '), но разве это не будет проблемой? Когда 'alloc' вызывает' sharedInstance', это приведет к другому вызову 'alloc' и так далее бесконечно. – David
Похоже, мне действительно нужно allocWithZone: и что у меня бесконечный цикл. – Jane
Чтобы решить бесконечный цикл, у вас может быть переменная флага, указывающая, был ли один сингл в процессе создания. 'sharedInstance' установил бы его, и' alloc' проверит его. Если он был установлен, 'alloc' будет вызывать' [super alloc] '. – David