Я использую ARC для своего проекта
У меня есть 1 класс:
@implementation MyObject
+ (instancetype)shareInstance {
static id _shareInstance = nil;
static dispatch_once_t oncePredicate;
dispatch_once(&oncePredicate, ^{
_shareInstance = [[self alloc] init];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(freeInstance)
name:kLC_Notification_FreeAllInstance object:nil];
});
return _shareInstance;
}
+ (void)freeInstance {
/*I want to release object "_shareInstance" but how??? */
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
@end
Но я не могу освободить свой объект экземпляра, поэтому мне нужно изменить:
(переместить строку кода static id _shareInstance = nil;
из +shareInstance
@implementation MyObject
static id _shareInstance = nil;
+ (instancetype)shareInstance {
static dispatch_once_t oncePredicate;
dispatch_once(&oncePredicate, ^{
_shareInstance = [[self alloc] init];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(freeInstance)
name:kLC_Notification_FreeAllInstance object:nil];
});
return _shareInstance;
}
+ (void)freeInstance {
_shareInstance = nil;
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
@end
Когда я нажимаю уведомление с именем: kLC_Notification_FreeAllInstance, все объекты экземпляра освобождаются (вызываются все методы Dealloc). Все в порядке
НО когда я позвоню ему снова....
все экземпляры не инициализируются при следующем вызове. И после этого все объекты экземпляров будут равны нулю
Я сделал много точек останова в блоке dispatch_once
, и ни одна точка останова не вызывается.
Итак, мои вопросы:
Написание
static id object;
в методе и запись вне метода — это разные вещи?Как я могу освободить все объекты экземпляра, чтобы я мог снова вызывать их? (Я хочу использовать ARC, я могу сделать это без ARC)