Erstellen Sie ein Array von Arrays, die in XCode
Ich versuche zu bauen, ein array mit arrays von dictionary-Objekten in Xcode. Ich kann ein working-array, das ein oder mehrere Wörterbücher, in es und verwenden Sie dann die addObject: Methode zum hinzufügen dieses array als ein Objekt in meinem Haupt-array. Ich Zyklus um dies mehrere Male, den Wiederaufbau der array arbeiten und hinzufügen von Objekten auf der Haupt-array. Alles gut so weit, außer, dass bei der Sichtung meiner Haupt-array, es enthält Abschriften der letzten Wörterbüchern, die die Arbeits-array aufgebaut ist. Ich gehe davon aus dies ist weil wenn ich mit der addObject-es weist einfach einen Zeiger auf das array aber nicht erhöht den retain-count oder erstellen Sie eine Kopie des array arbeiten, also jedes mal, wenn es wieder aufgebaut ist das Haupt-array einfach Punkte, die in diesem array.
Ich denke, meine Frage ist wie erstelle ich eine Kopie des working-array hinzufügen, um die Haupt-array und erstellen Sie dann es neu und fügen Sie es wieder? Hoffe das macht Sinn und sorry, wenn dies scheint eine grundlegende Frage: ist es (ich bin neu in Xcode) - und jede Hilfe wäre wirklich zu schätzen.
[sectionArray release];
sectionArray = [[NSMutableArray alloc] init];
[sectionArray addObject:dict];
Das alles funktioniert, das ist toll. Eine Sache, die ich don ' T haben, meinen Kopf um noch ist, besteht die Gefahr, dass, wenn ich fertig bin mit dem Haupt-array, und ich ein [mainArray release] auch, dass diese untergeordneten arrays werden zurückgelassen werden, im Speicher, oder wird der release vernichten?
Ich habe es gelöst durch re-Initialisierung die innere Funktion array statt nur entfernen Sie alle Objekte, d.h.,
Habe ich:
[sectionArray removeAllObjects];
[sectionArray addObject:dict];
Und es geändert:
sectionArray = [[NSMutableArray alloc] init];
[sectionArray addObject:dict];
Habe ich das Gefühl, obwohl, dass dies ist nicht eine gute Sache zu tun, und ich werde beginnen zu Speicherverlust alle über dem Platz.
Code-Beispiel? Was du fragst ist möglich, so können Sie einen Fehler haben.
Ja, es wird. Sie müssen release/autorelease. Oder verwenden Sie die NSMutableArray +array-Methode.
Es ist in Ordnung, nur sicherstellen, dass Sie lassen Sie die alten Arrays ersten, z.B. [sectionArray Version], bevor Sie die oben genannten zwei Zeilen. Wenn Sie angerufen addObject der retain-count auf das zugrunde liegende Objekt wird erhöht, so dass die Veröffentlichung sectionArray nicht frei das eigentliche array. Dann lassen Sie das array von Zeigern wird es kostenlos allen arrays verwiesen wird, die von diesen Zeigern.
Das ist großartig, danke Jungs. Bin wirklich peinlich zu Fragen, wie Grundlagen-und das ist wirklich hilfreich.
InformationsquelleAutor Dave Hill | 2009-11-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn alles, was Sie tun, mit
sectionArray
ist, um es in ein anderes array, das Sie brauchen, um Sie freizugeben, nachdem Sie legte es in IhremainArray
so, dass nurmainArray
enthält einen Verweis auf:Wenn Sie später die Herausgabe Ihrer
mainArray
Referenz wird es kümmern sich alle befreit, sind es die Kinder und IhresectionArray
's befreit werden. (Das gleiche gilt für die dicts setzen insectionArray
).Hoffe, dass dies geholfen.
InformationsquelleAutor hallski