Frage

ich habe ein Problem mit der Speicherverwaltung, denke ich. Mein NSArray (genannt arr) wird zufällig mal in verschiedene Dinge drehen. Ich habe keine Idee warum. Ich habe eine .h-Datei, dass das Array deklariert und dann initialisieren ich das Array mit

NSString *input = [[NSString alloc] initWithData:myData encoding:NSACIIStringEncoding];
arr = [input componentsSeperatedByString:@"\n"];

und dann habe ich es während des Programms verwenden und plötzlich verwandelt es sich in verschiedene Dinge (UITouch, manchmal, zum Beispiel). Ich rief nie Release drauf. Warum tut er das? Wie kann ich Objekte aus zufällig wird geändert durch Speicherprobleme zu vermeiden?

Danke!

War es hilfreich?

Lösung

Versuchen zu behalten arr .

arr = [[input componentsSeperatedByString:@"\n"] retain];

Andere Tipps

Was passiert, ist, dass der Speicher, belegte einmal von Ihrem NSArray, von einem anderen Objekt besetzt ist. Dies kann jedes Objekt sein, und da Sie den Bildschirm viel ein UITouch ist sehr verbreitet sind zu berühren.

Das heißt, Sie sind nicht die NSArray zu halten, wenn Sie sollte, so ist es zu früh freigegeben. Sie zeigen nicht den Code erklärt arr, aber wenn Sie erklären arr als

@property (nonatomic,retain) NSArray *arr;

und synthetisieren sie mit

@synthesize arr;

dann wird der Halt durch einfaches assiging behandelt statt self.arr arr:

self.arr = [input componentsSeperatedByString:@"\n"];

In Kakao-sprechen, Ihr Objekt jetzt "besitzt" das Array. Im dealloc Methode dieser Klasse, sollten Sie [self.arr release].

Should weisen Sie eine andere Array self.arr, das Objekt zu self.arr zugewiesen zuvor erhalten freigegeben und die neuen beibehalten.

oder initialisieren Sie ein neues Array mit diesem Array:

arr = [[NSArray alloc] initWithArray:input];
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top