Pregunta

Estoy teniendo un problema con la gestión de memoria que pienso. Mi NSArray (llamado arr) se está convirtiendo en cosas diferentes en momentos aleatorios. No tengo ni idea de porqué. Tengo un archivo .h que declara que la matriz, y luego inicializar la matriz utilizando

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

y luego lo uso todo el programa y de repente se transforma en cosas diferentes (UITouch, a veces, por ejemplo). Nunca llamé un comunicado en él. ¿Por qué se hace esto? ¿Cómo puedo evitar que los objetos al azar de ser cambiado debido a problemas de memoria?

Gracias!

¿Fue útil?

Solución

Trate de mantener arr .

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

Otros consejos

Lo que sucede, es que la memoria, una vez ocupada por su NSArray, está ocupada por otro objeto. Esto puede ser cualquier objeto, y ya que estás tocando la pantalla mucho un UITouch es muy común.

Esto significa que no estás de retención del NSArray cuando debería, por lo que se libera prematuramente. No se presenta el arr declarar código, pero si se declara como arr

@property (nonatomic,retain) NSArray *arr;

y sintetizar utilizando

@synthesize arr;

A continuación, la retención se maneja simplemente assiging a self.arr en lugar de arr:

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

En la jerga de cacao, su objeto ahora "dueño" de la matriz. En el método dealloc de esta clase, debe [self.arr release].

En caso de que asigne alguna otra matriz para self.arr, el objeto asignado a self.arr previamente conseguirá puesto en libertad, y el nuevo retenido.

o inicializar una nueva matriz con esta matriz:

arr = [[NSArray alloc] initWithArray:input];
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top