Можно ли передать [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
в блоке?
Спасибо за ваши усилия.