2012-04-09 5 views
1

Ich versuche, ein Array von Zahlen zu formatieren, um in einem Array von CCLabelTTFs in einer Schleife anzuzeigen. NSNumberFormatter gibt ein AutoRelease-Objekt zurück. Ich bin mir nicht ganz sicher, wie ich hier mit der Speicherverwaltung umgehen soll. Jeder Rat würde sehr geschätzt werden.Objective C Autorelease in einer Schleife mit NSNumberFormatter

Hier ist das Problem, ich versuche, herauszufinden:

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
NSString *tempString; 

for(int i = 0; i<10; i++){ 
    tempString = [formatter stringFromNumber:[NSNumber numberWithInteger:NumberArray[i]]]; 
    CCLabelTTFArray[i] = [[CCLabelTTF alloc] initWithString: tempString fontName:@"Arial" fontSize:10.0f]; 
    [tempString release]; 
} 

[formatter release]; 
+2

Sie müssen nicht "[tempString release];" aufrufen, das ist alles. Die Laufschleife "wird die Objekte für einige Zeit automatisch" freigeben * nachdem * Ihre Methode abgeschlossen ist. – dasblinkenlight

+0

Ich dachte, dass es ein Problem geben könnte, da ich den tempString Zeiger ändere und so den Zeiger auf dieses Objekt verliere. Ich dachte, es könnte einen Speicherverlust verursachen, da die Funktion tempString nach dem Ende der Funktion zwar automatisch freigibt, aber nicht alle vorherigen Zuweisungen von tempString. Ich wollte die [tempString release] nicht machen, mein Fehler. – Ganamede

+0

Ich habe meine Antwort als Antwort auf Ihren letzten Kommentar bearbeitet. – dasblinkenlight

Antwort

1

Sie brauchen nicht [tempString release]; zu nennen: die Laufschleife wird „Autofreigabe“ die Objekte für Sie einige Zeit nach Ihre Methode abgeschlossen . Bei kurz laufenden Schleifen (wie Ihrer, die nur zehn Iterationen haben) gibt es nichts, worüber man sich Sorgen machen müsste. Für Schleifen mit Tausenden von Iterationen können Sie eine Autorelease Pool hinzufügen.

Ich dachte, es könnte ein Speicherleck, da ein Ende der Funktion verursachen wird es Autorelease tempString aber nicht alle bisherigen Zuordnungen von tempString

Jeder Aufruf der stringFromNumber: Methode fügt seine Rückkehr value to autoreelease pool, also unabhängig davon, wie oft Sie die Schleife ausführen, werden alle zurückgegebenen Strings automatisch freigegeben.

+0

Danke, ich schätze die unkomplizierte Antwort. Alles, was ich bis zu diesem Punkt gelesen habe, war nicht klar darüber, wie Autorelease-Objekte verfolgt werden. – Ganamede