Ich lese die Dokumentation von Xcode und hier ist etwas, das mich verwirrt:
__block typeof(self) tmpSelf = self;
[self methodThatTakesABlock:^ {
[tmpSelf doSomething];
}];
Folgendes wird aus der Dokumentation kopiert:
Ein Block bildet einen starken Verweis auf Variablen, die er erfasst. Wenn Sie
self
innerhalb eines Blocks verwenden, bildet der Block eine starke Referenz aufself
. Wenn alsoself
auch eine starke Referenz auf den Block vorhanden ist (was normalerweise der Fall ist), ergibt sich ein starker Referenzzyklus. Um den Zyklus zu vermeiden, müssen Sie einen schwachen (oder__block
) Verweis auf sich selbst außerhalb des Blocks erstellen , wie im obigen Beispiel.
Ich verstehe nicht, was "schwach (oder __block
)" bedeutet.
Ist
__block typeof(self) tmpSelf = self;
und
__weak typeof(self) tmpSelf = self;
genau das gleiche hier?
Ich habe ein weiteres Stück im Dokument gefunden:
Hinweis: Wenn Sie in einer Speicherbereinigungsumgebung sowohl
__weak
als auch__block
Modifikatoren auf eine Variable anwenden , stellt der Block nicht sicher, dass sie am Leben bleibt.
Also bin ich total verwirrt.