У меня есть singleton и вы хотите создать внутреннюю флаговую переменную, которая должна указывать на то, что singleton был «выпущен», и когда я получаю экземпляр singleton, его следует повторно инициализировать.Статическая переменная в singleton
В этом случае я решаю использовать статическую переменную
static BOOL wasReleased = NO;
и установить его на «YES» в истреблять функции:
- (void)destroy
{
wasReleased = YES;
...release internal singleton resources...
}
Но когда я пытаюсь получить одноэлементный экземпляр этой переменной значение является всегда «НЕТ», поэтому внутренние ресурсы никогда не восстанавливаются после выпуска:
+ (MySingleton *)sharedInstance
{
if (sharedCoordinator == nil)
{
sharedCoordinator = [[super alloc] init];
[sharedCoordinator initialize];
}
if (wasReleased)
{
[sharedCoordinator initialize];
}
return sharedCoordinator;
}
My unders возможно, неправильное обращение с такой ситуацией, пожалуйста, уточните это для меня.
Вы имеете в виду, что это 'НЕТ' _after_ вы отправляете' destroy'? –
Вы называете уничтожение вручную? потому что я предполагаю, что иначе объект просто не будет уничтожен. –
Джош Касуэлл, да, его значение «НЕТ» после отправки 'destroy'. Я меняю значение «wasReleased» только в этих двух ситуациях, о которых идет речь выше. Я проверяю значение 'isReleased' внутри' destroy', поэтому это 'YES', как я ожидаю, но после этого нет. Joerg Simon, да, я вызываю «уничтожить» вручную, я использую точки останова, чтобы убедиться. – zakhej