Я нашел / составил ответ на этот вопрос: я просто переопределяю метод init, чтобы при вызове из файла XIB он по-прежнему возвращал синглтон. Затем я предоставляю метод realInit для реальной инициализации при первом вызове init.
Код:
-(id)init
{
@synchronized(self)
{
if (_sharedInstance == nil)
{
_sharedInstance = [[VayprServerTypes alloc] realInit];
}
}
[self release];
return _sharedInstance;
}
-(id)realInit
{
if (self = [super init])
{
serverTypesArray = [[NSMutableArray alloc] init];
}
return self;
}
РЕДАКТИРОВАТЬ: Конечно, вам нужно определить _sharedInstance как статическую переменную в верхней части реализации вашего класса:
static ClassTypeGoesHere *_sharedInstance;
ТАКЖЕ РЕДАКТИРОВАТЬ: поскольку теперь вы точно знаете, что ваш метод init будет вызван хотя бы один раз, вы можете заменить свой обычный одноэлементный метод sharedInstance следующим:
+(ClassTypeGoesHere *)sharedInstance
{
return _sharedInstance;
}
Если кто-нибудь видит какие-либо очевидные проблемы с этим дизайном, пожалуйста, дайте мне знать!
SphereCat1