Objective C - ARC - Wann @autoreleasepool zu verwenden ist

8

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?

    
user1021085 11.02.2012, 22:48
quelle

2 Antworten

10

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 Ссылка

    
Bryan Chen 12.02.2012, 03:58
quelle
1

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.

    
Odd-Arne Dahle 22.10.2012 07:54
quelle