Действительно ли необходим танец strongSelf / strongSelf, когда ссылается на себя внутри несохраненного завершения, вызываемого из UIViewController?

Скажем, у меня есть следующий метод внутриUIViewController подкласс:

- (void)makeAsyncNetworkCall
{
    [self.networkService performAsyncNetworkCallWithCompletion:^{
        dispatch_async(dispatch_get_main_queue(), ^{
                [self.activityIndicatorView stopAnimating];
            }
        });
    }];
}

Я знаю что ссылка наself внутри блока приводит кUIViewController экземпляр сохраняется в блоке. Так долго какperformAsyncNetworkCallWithCompletion не хранит блок в свойстве (или ivar) на моемNetworkServiceЯ прав, думая, что нет цикла сохранения?

Я понимаю, что приведенная выше структура приведет к сохранению UIViewController доperformAsyncNetworkCallWithCompletion заканчивается, даже если он был выпущен системой ранее. Но вполне вероятно (или даже возможно?) Система освободит моюUIViewController вообще (после изменений в способе iOS 6 управляетUIViewControllerбэкCALayer Память)?

Если есть причина, по которой я должен выполнить «танец слабого себя / сильного себя», это будет выглядеть так:

- (void)makeAsyncNetworkCall
{
    __weak typeof(self) weakSelf = self;
    [self.networkService performAsyncNetworkCallWithCompletion:^{
        typeof(weakSelf) strongSelf = weakSelf;
        if (!strongSelf) {
            return;
        }
        dispatch_async(dispatch_get_main_queue(), ^{
                [strongSelf.activityIndicatorView stopAnimating];
            }
        });
    }];
}

Но я считаю это безобразно некрасивым и хотел бы избежать этого, если в этом нет необходимости.

Ответы на вопрос(4)

Ваш ответ на вопрос