Можно ли передать [self anyFunction] в блоках без объекта __weak из self?
В качестве примера это допустимый код из System Framework:
[UIView animateWithDuration:0.8 animations:^{
//Do animationStuff
} completion:^(BOOL finished) {
[self anyFunction];
}];
Вы можете передать [self anyFunction]
в блок завершения без предупреждения. Но если вы напишете свой собственный метод с блоком завершения, появляется следующее предупреждение: фиксировать "я" сильно в этом блоке, вероятно, приведет к циклу сохранения.
Рабочее решение довольно просто (iOS 5 + ARC). Перед объявлением блока:
__weak MyClass *weakSelf = self;
а в блоке завершения вы должны позвонить:
[weakSelf anyFunction];
Но вернемся к моему вопросу: почему нет необходимости в API-интерфейсах System Framework использовать объект __weak
и использовать self
без каких-либо предупреждений. И как реализовать метод без необходимости объекта __weak
в блоке?
Спасибо за ваши усилия.