Wann sollte ich mein Array freigeben?

8

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%     
Sheehan Alam 24.06.2011, 02:03
quelle

7 Antworten

9

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 .

    
Deepak Danduprolu 24.06.2011, 02:14
quelle
2

Wahrscheinlich möchten Sie es nicht sofort freigeben, wenn Sie:

  • Verwenden Sie didSelectRowAtIndexPath: Methode für Detailansichten und leiten Sie diese Daten an sie weiter
  • Definieren Sie benutzerdefinierte UITableViewCell-Stile in cellForRowAtIndexPath: method
  • Verwenden Sie diese Daten an anderer Stelle

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.

Beispiel:

Ich bekomme Wörterbücher in einem Array von einer API in meiner App und verwende so etwas.

MyTableViewController.h

%Vor%

MyTableViewController.m

%Vor%     
Ahmet AYGÜN 28.06.2011 04:34
quelle
2

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.

    
Narasimha Reddy 29.06.2011 07:29
quelle
0

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.

    
Raphael Petegrosso 24.06.2011 02:13
quelle
0

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.

%Vor%     
Jhaliya 24.06.2011 02:44
quelle
0

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

verwenden %Vor%

Geben Sie dann Ihr Element-Array in dealloc frei und setzen Sie es in viewDidUnload

auf Null %Vor%

Hoffe, jetzt können Sie verstehen, wie Sie das verwenden sollten.

    
Ishu 28.06.2011 08:07
quelle
0

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.

    
elitalon 02.07.2011 16:06
quelle