Ich analysiere einige JSON aus dem Internet und füge sie dann einem Array hinzu, das die Datenquelle für mein UITableView ist. Ich bin mir nicht sicher, wann ich mein Array veröffentlichen sollte.
.h: Elemente
%Vor%.m: connectionDidFinishLoading
%Vor% Erstens möchten Sie möglicherweise items
als Instanz von NSMutableArray
deklarieren, wenn Sie addObject:
dafür aufrufen möchten.
Zwei, deklarieren Sie es als eine Eigenschaft, so dass, wenn Sie es mehrmals erhalten, der ältere Wert freigegeben wird, wenn Sie tun.
%Vor% Und der richtige Punkt für die Freigabe wäre dealloc
.
Wahrscheinlich möchten Sie es nicht sofort freigeben, wenn Sie:
Es empfiehlt sich, eine Instanzvariable zu deklarieren und sie in .m zu synthetisieren, in geeigneten Operationen zu verwenden und in der Dealloc-Methode freizugeben.
Ein möglicher Freigabepunkt, den Sie verwenden könnten, ist, wo Sie Ihre Daten aktualisieren, die in der Tabelle angezeigt werden.
Ich bekomme Wörterbücher in einem Array von einer API in meiner App und verwende so etwas.
Die Freigabe an falschen Stellen führt manchmal zu Speicherlecks, bevor die Zuweisung selbst eine Bedingung wie if () {[... release]} haben kann. Nicht getestet, aber diese Art der Freigabe vermeidet Lecks.
Am häufigsten wird die Elementvariable als Attribut Ihrer Klasse verwendet, sobald Sie sie wahrscheinlich in Ihrer tableView:cellForRowAtIndexPath:
-Methode verwenden müssen.
Wenn Sie es als Attributvariable haben, können Sie es auf der Methode dealloc
freigeben.
Es ist klar, dass Ihr Array item
von UITableView
verwendet wird, um Daten anzuzeigen.
Deklarieren Sie es zuerst als Instanzvariable in Ihrer .h-Klasse.
.h Klasse
%Vor%In Ihrer .m -Klasse.
%Vor%Und Sie Code zum Füllen des Arrays sollte
sein %Vor% Geben Sie jetzt in dealloc
Ihre Array-Instanz frei.
Der richtige Weg ist die Eigenschaft in der Klasse .h zu machen, da Sie sie als Eigenschaft deklariert haben: Denken Sie daran, dass Sie immer eine Eigenschaft zuweisen, indem Sie self verwenden.
Ihre Aussage items=[[NSMutableArray alloc] init];
ist falsch. (self verwenden) auch, da Ihre Eigenschaft retain
ist, geben Sie den using-Alloc ein, erhöhen Sie retain count.that gibt Ihnen ein Leck.
also auf diese Weise in viewDidLoad
Geben Sie dann Ihr Element-Array in dealloc
frei und setzen Sie es in viewDidUnload
Hoffe, jetzt können Sie verstehen, wie Sie das verwenden sollten.
Laut Apples Dokumentation der UITableView reloadData Methode :
"[...] Aus Gründen der Effizienz werden in der Tabellenansicht nur die Zeilen angezeigt, die sichtbar sind"
Das bedeutet, dass Sie das Element-Array nicht freigeben sollten, solange die Tabelle verwendet wird, d. h. Sie müssen das Array als Eigenschaft deklarieren.
Erstens, weil Sie, wenn Sie die Ansicht scrollen, die items
Information benötigen, um die Zeilen darunter oder darüber anzuzeigen.
Und zweitens, da Sie eine Eigenschaft sind, stellen Sie sicher, dass ein vorheriger Wert freigegeben wird, wenn Sie items
einen neuen Wert zuweisen.
Schließlich ist der gemeinsame Ort, um eine Eigenschaft freizugeben, in der Methode dealloc
und abhängig von Ihrer Implementierung in viewDidUnload
method.
Tags und Links memory objective-c iphone nsarray cocoa-touch