Domanda

Sto avendo un problema con la gestione della memoria che penso. Il mio NSArray (chiamato arr) si sta trasformando in cose diverse, a volte casuali. Non ho idea del perché. Ho un file .h che che dichiara l'array, e poi ho inizializzare l'array usando

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

e poi lo uso per tutto il programma e improvvisamente si trasforma in cose diverse (UITouch, a volte, per esempio). Non ho mai chiamato un rilascio su di esso. Perché si fa questo? Come faccio a impedire che gli oggetti in modo casuale venga modificata a causa di problemi di memoria?

Grazie!

È stato utile?

Soluzione

Cercate di mantenere il arr .

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

Altri suggerimenti

Che cosa succede, è che la memoria, un tempo occupato dal vostro NSArray, è occupato da un altro oggetto. Questo può essere qualsiasi oggetto, e dal momento che si sta toccando lo schermo un sacco un UITouch è molto comune.

Questo significa che non stai conservando il NSArray quando si dovrebbe, in modo che venga rilasciato prematuramente. Non si mostra il dichiarando arr codice, ma se si dichiara arr come

@property (nonatomic,retain) NSArray *arr;

e sintetizzare usando

@synthesize arr;

quindi il mantenimento viene gestito semplicemente assiging a self.arr invece di arr:

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

Nel cacao parlare, vostro oggetto ora "possiede" l'array. Nel metodo dealloc di questa classe, si dovrebbe [self.arr release].

In caso di assegnare qualche altro array self.arr, l'oggetto assegnato a self.arr precedenza otterrà rilasciato, e la nuova trattenuta.

o inizializzare un nuovo array con questa matrice:

arr = [[NSArray alloc] initWithArray:input];
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top