Ich habe derzeit Probleme, die Grundlagen von Obj-C-Blöcken und den __block-Speichertyp zu verstehen. Aus der folgenden Dokumentation:Probleme beim Verständnis der Objective-C-Block-Dokumentation
Ich versuche, den folgenden Absatz und Beispiele zu verstehen:
Wenn ein Block kopiert wird, erstellt es starke Referenzen Variablen innerhalb der verwendeten Objekt Block. Wenn Sie innerhalb der Implementierung einer Methode einen Block verwenden:
Wenn Sie auf eine Instanzvariable als Referenz zugreifen, wird ein starker Verweis auf self gemacht; Wenn Sie auf eine Instanzvariable nach Wert zugreifen, wird auf die Variable stark Bezug genommen. Die folgenden Beispiele erläutern die beiden unterschiedlichen Situationen:
dispatch_async(queue, ^{
// instanceVariable is used by reference, a strong reference is made to self
doSomethingWithObject(instanceVariable);
});
id localVariable = instanceVariable;
dispatch_async(queue, ^{
/*
localVariable is used by value, a strong reference is made to localVariable
(and not to self).
*/
doSomethingWithObject(localVariable);
});
dieses Verhalten für eine bestimmte Objektvariable außer Kraft zu setzen, können Sie es mit dem __block Speichertyp Modifikator markieren.
Meine Fragen:
- Wie genau ist ein Beispiel von „Verweis zugegriffen“, während der andere durch die Variable zugegriffen wird? Warum wird localVariable "nach Wert verwendet?"
- Was bedeutet das Dokument, wenn "ein starker Hinweis auf sich selbst gemacht wird"? Auf welches "Selbst" bezieht es sich?
- Wenn ich den __block-Speichertyp im zweiten Beispiel zu localVariable hinzufüge, kann ich nicht davon ausgehen, dass der Block über die Variable geschlossen wird, sodass sie im Heap bleibt, bis der Block freigegeben wird? Welche anderen Dinge passieren?
Vielen Dank!