Я видел следующий код в WWDC 2011- Session 322 Objective-C улучшению Глубиныслабая ссылка причиной аварии ошибка
-(void) startBlinker{
__weak MyClass * weakSelf = self;
blinker = [BlinkerService register:^{
MyClass *strongSelf = weakSelf;
if(strongSelf){
[strongSelf->myView blink];
}
}];
}
Я думаю, что смогу осуществить это просто проверить weakSelf как
if(weakSelf){
[weakSelf->myView blink];
}
почему код использует strongSelf?
Причина в том, что weakSelf может стать 'nil' после того, как вы проверите, является ли это' nil' и перед вами доступ к его iView. Создав для этого ссылку на стек, вам гарантируется, что объект будет сохраняться до тех пор, пока не будет использован последний синтаксис ссылки (время, определенное ARC). –
спасибо, пожалуйста, ответьте на этот вопрос, и я приму его. можете ли вы сказать мне, когда приложение может потерпеть крах, потому что доступ к объекту nil? потому что отправить сообщение в nil не будет crash – NOrder
Код 'weakSelf-> myView' не отправляет сообщение' weakSelf', он использует оператор разыменования '->'. 'weakSelf-> myView' эквивалентно' (* weakSelf) .myView'; в результате, если 'weakSelf' является' nil', мы будем разыскивать 'NULL' (напомним, что' nil' и 'NULL' - это нулевой адрес) и аварийный. –