Ich habe ein wenig über ARC gelesen und ich habe das gesehen:
%Vor%Blick auf diesen Teil;
%Vor%Wenn er c = null tut; sollte nicht alles zerstört werden? Aber es sagt, die Ausgabe ist nur, dass n zerstört wird. Kann jemand erklären warum?
Und er sagt, das Ergebnis ist so schlecht wie ein Speicherleck, wie reparierst du es dann?
Und eine letzte Frage, wann sollten Sie @autoreleasespool benutzen?
nach Zeile
%Vor% Eine Customer
-Instanz wird freigegeben, weil niemand sie beibehält, daher ist die Ausgabe
Zerstören: Johnny Walker
aber n
und a
wurden nicht freigegeben, da sie immer noch im Bereich bleiben und ihnen nil
nicht zugewiesen wurde.
und ich glaube nicht, dass dies irgendeine Art von Speicherverlust ist
Normalerweise müssen Sie @autorelasepool nicht verwenden, es sei denn, Sie machen so etwas
%Vor%Als 1000000 NSString wird während der Schleife zugewiesen. Sie werden nach der Rückgabe der Methode (tatsächlich nach diesem Runloop) aufgehoben, verbrauchen jedoch bereits zu viel Speicher. Daher sollte
ersetzt werden %Vor%Sie sollten dies lesen, um mehr über die Speicherverwaltung zu erfahren Ссылка
Der offensichtliche Unterschied zwischen Name und Adresse besteht darin, dass Sie ein Adressobjekt für die Adresse und NSString für den Namen erstellen. Im Adressobjekt ist @public. Dies bedeutet, dass der NSString nicht verfügbar ist, wenn der Kunde freigegeben wird, aber nicht das Adressobjekt. Er erinnert sich weiterhin an die Adresse, die der @public NSString * -City bei der Freigabe des Kunden zugewiesen wurde.
Wenn Sie also diesen öffentlichen Wert für die Adresse aufrufen, ist er immer noch da, aber nicht der NSString für den Namen. Um dies zu beheben, entfernen Sie entweder die Schnittstelle von Address Object, die beide Werte freigibt, oder Sie erstellen eine Schnittstelle für name anstelle von NSString.
Tags und Links objective-c automatic-ref-counting