Was ist der Unterschied zwischen einer __weak- und einer __block-Referenz?

Bin ich beim Lesen Xcode-Dokumentation, und hier ist etwas, das mich verwirrt:

__block typeof(self) tmpSelf = self;
[self methodThatTakesABlock:^ {
    [tmpSelf doSomething];
}];

Folgende ist kopiert aus der Dokumentation:

Einen block bildet einen starken Bezug zur Variablen erfasst. Wenn Sie
self innerhalb eines Blockes, den block bildet einen starken Bezug zur selfso dass, wenn
self hat auch einen starken Bezug auf den block (die es in der Regel
es tut), eine starke Referenz-Zyklus ergibt. Um zu vermeiden, den Zyklus, die Sie benötigen
zum erstellen einer schwachen (oder __block) Verweis auf sich selbst außerhalb des Blocks, so wie
in dem Beispiel oben.

Ich verstehe nicht, was bedeutet "eine schwache (oder __block)" gemeint?

Ist

__block typeof(self) tmpSelf = self;

und

__weak typeof(self) tmpSelf = self;

genau das gleiche hier?

Fand ich ein weiteres Stück in das Dokument:

Hinweis: In ein garbage Collection-Umgebung, wenn Sie gelten sowohl __weak und
__block Modifikatoren auf eine variable, dann wird der block nicht sicher, dass es am Leben gehalten wird.

So, ich bin Total verwirrt.

InformationsquelleAutor der Frage HanXu | 2012-08-02

Schreibe einen Kommentar