Можно передать [self anyFunction] в блоках без объекта __weak (iOS 5 + ARC)

Можно ли передать [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 в блоке?

Спасибо за ваши усилия.

23
задан Brad Larson 27 January 2012 в 22:29
поделиться