XCode Arc Speicherverwaltung, wann gibt er frei?

tlclone

Neues Mitglied
Thread Starter
Dabei seit
04.05.2012
Beiträge
6
Reaktionspunkte
0
Ich verzweifle im Moment mit diesem ARC.
Ich habe eine Schleife, in dieser hole ich Daten Seitenweise ab.
Diese landen in einem NSArray mit diversen NSDictatonarys.
Eigentlich erwarte ich das mit dem nächsten Schleifenlauf dieses Array aus dem Speicher fliegt, tut es aber nicht. Der Speicherverbrauch steigt und steigt und steigt.
Erst wenn die gesamte Funktion beendet ist wird der Speicher langsam wieder frei.

Ich bin mir jetzt nicht sicher, release gibt's ja nicht mehr, wie geht man hier vor?


Code:
for(int i=0; i<seiten; i++){
   NSDictionary *xmlDictionary = [XMLReader dictionaryForXMLString:md error:&parseError];

   // Hier kommt nun die Auswertung

   // Am ende brauch ich das nicht mehr, somit wird es neu erstellt.
}

Ich habe probiert:

1. Das Dictionary einmal vor der Schleife zu definieren
2. Am Schleifende auf NULL zu setzen

Es bringt nichts, Speicher steigt an.
 
Hast du das selbe Konstrukt den schon mal manuell versucht? Ich glaube nämlich, das auch mit manuellem Speichermanagement der Speicher innerhalb der Schleife nicht freigegeben wird.
 
Tatsache, selbst mit release ohne arc müllt er sich voll ;(
ok dann muss ich wohl noch ein bisschen kniffeln :)
Danke Dir für den Tipp.
 
Tatsache, selbst mit release ohne arc müllt er sich voll ;(
ok dann muss ich wohl noch ein bisschen kniffeln :)
Danke Dir für den Tipp.

Ja, dafür baut man mit der Hand Autorelease Pools. Vor ARC mit alloc und drain, mit ARC:
Code:
for(int i=0; i<seiten; i++){
@autoreleasepool {
   NSDictionary *xmlDictionary = [XMLReader dictionaryForXMLString:md error:&parseError];

   // Hier kommt nun die Auswertung

   // Am ende brauch ich das nicht mehr, somit wird es neu erstellt.
}
}

Merke: Nur weil es ARC ist, darf man nicht mit dem Denken aufhören ;)

Gruss

Alex
 
Das war die Lösung :)
Vielen Dank.
 
Zurück
Oben Unten