Ist der SchwachSelbst / StarkSelbst-Tanz wirklich notwendig, wenn auf sich selbst in einer nicht beibehaltenen Vervollständigung verwiesen wird, die von einem UIViewController aufgerufen wird?

Angenommen, ich habe die folgende Methode in einemUIViewController Unterklasse:

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

Ich weiß, dass der Verweis aufself innerhalb des Blocks ergibt sich dieUIViewController Instanz, die vom Block beibehalten wird. So lange wieperformAsyncNetworkCallWithCompletion speichert den Block nicht in einer Eigenschaft (oder in einem ivar) auf meinemNetworkServiceHabe ich Recht, wenn ich denke, dass es keinen Beibehaltungszyklus gibt?

Mir ist klar, dass diese Struktur dazu führen wird, dass der UIViewController so lange beibehalten wird, bisperformAsyncNetworkCallWithCompletion beendet, auch wenn es früher vom System freigegeben wurde. Aber es ist wahrscheinlich (oder sogar möglich?), Dass das System meine Zuordnung aufhebtUIViewController überhaupt (Nach den Änderungen an der Art und Weise verwaltet iOS 6 eineUIViewControllerunterstütztCALayer Erinnerung)?

Wenn es einen Grund gibt, warum ich den "SchwachSelbst / StarkSelbst-Tanz" machen muss, würde das so aussehen:

- (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];
            }
        });
    }];
}

Aber ich finde das unbeschreiblich hässlich und würde es gerne vermeiden, wenn es nicht nötig ist.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage