Работая в C # и Java, я видел в основном один способ, которым все инициализируют синглтоны:
static obj _inst = null;
obj getInstance() {
if (_inst == null) {
_inst = new obj();
}
return _inst;
}
Теперь, когда я перехожу на Objective-C для iPhone, всякий раз, когда я вижу примеры кода, я в основном вижу то же самое:
static obj _inst = nil;
+ (obj *) sharedObj {
if (!_inst) {
_inst = [[obj alloc] init];
}
return _inst;
}
Существует метод класса +initialize
, который вызывается для каждого класса во время выполнения Objective C перед его использованием. Есть ли причина, по которой я не мог использовать это для создания своих синглетонов?
static obj _inst = nil;
+ (void) initialize {
if (self == [obj class]) {
_inst = [[obj alloc] init];
}
}
+ (obj *) sharedObj {
return _inst;
}
Он прекрасно работает, когда я пробую его в своем коде, и избавляется от проверки, чтобы увидеть, существует ли он каждый раз, когда к нему обращаются. Есть ли причина, по которой я не должен создавать синглтоны таким образом?