Advertencia de memory recibida en setimage

Este problema me ha dejado completamente confundido. Esto es para iOS 5.0 con Xcode 4.2

Lo que sucede es que en mi aplicación dejo que el usuario select imágenes de su álbum de fotos y las guardo en el directory de documentos de las aplicaciones. Muy claro.

Lo que hago entonces es que en uno de los files viewController.m creo múltiples UIImageViews y luego establezco la image para la vista de la image de una de la image que el usuario seleccionó de las aplicaciones dir. El problema es que después de cierto número de sets UIImage recibo una "advertencia de memory recibida". Por lo general, sucede cuando hay 10 imágenes. Si permitimos decir que el usuario seleccionó 11 imágenes, la aplicación se bloquea con Error (GBC). NOTA: cada una de estas imágenes tiene al less 2,5 MB por pieza.

Después de horas de testing finalmente networkinguje el problema a esta línea de código

[button1AImgVw setImage:image]; 

Si comento ese código. Todo comstack bien y no ocurren errores de memory. Pero si no comento ese código, recibo errores de memory y, finalmente, un locking. También tenga en count que procesa toda la IBAction de CreateViews, pero aún se cuelga al final. No puedo liberar o desasocultar ya que estoy ejecutando esto en iOS 5.0 con Xcode 4.2

Aquí está el código que he usado. ¿Alguien puede decirme qué hice mal?

 - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. [self CreateViews]; } -(IBAction) CreateViews { paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask ,YES); documentsPath = [paths objectAtIndex:0]; //here 15 is for testing purposes for (int i = 0; i < 15; i++) { //Lets not get bogged down here. The problem is not here UIImageView *button1AImgVw = [[UIImageView alloc] initWithFrame:CGRectMake(10*i, 10, 10, 10)]; [self.view addSubview:button1AImgVw]; NSMutableString *picStr1a = [[NSMutableString alloc] init]; NSString *dataFile1a = [[NSString alloc] init]; picStr1a = [NSMutableString stringWithFormat:@"%d.jpg", i]; dataFile1a = [documentsPath stringByAppendingPathComponent:picStr1a]; NSData *potraitImgData1a =[[NSData alloc] initWithContentsOfFile:dataFile1a]; UIImage *image = [[UIImage alloc] initWithData:potraitImgData1a]; // This is causing my app to crash if I load more than 10 images! // [button1AImgVw setImage:image]; //If I change this code to a static image. That works too without any memory problem. button1AImgVw.image = [UIImage imageNamed:@"mark-yes.png"]; // this image is less than 100KB } NSLog(@"It went to END!"); } 

Este es el error que obtengo cuando se seleccionan 10 imágenes. La aplicación se inicia y funciona

 2012-10-07 17:12:51.483 ABC-APP[7548:707] It went to END! 2012-10-07 17:12:51.483 ABC-APP [7531:707] Received memory warning. 

La aplicación se bloquea con este error cuando hay 11 imágenes

 2012-10-07 17:30:26.339 ABC-APP[7548:707] It went to END! (gbc) 

Esta situación (advertencias de memory y abandono de la aplicación al intentar cargar múltiples UII de resolución completa en una vista) ha intentado quemarme un par de veces en mi carrera de progtwigción iOS.

Debe hacer una copy networkingucida de su image original antes de realizar la llamada " setImage ".

Para mi propio código, utilizo la categoría " UIImage+Resize ", cuyos detalles se pueden encontrar aquí .

Vuelva a clasificar según el tamaño su image a algo más pequeño antes de insert en su visión, entonces se cerciora de que la image de la resolución completa sea lanzada (o fijada a cero si está en ARC) y usted debe tener un time más feliz de cosas.

Así es como lo hago en mi propio código:

 CGSize buttonSize = CGSizeMake(width, height); // it'd be nice if UIImage took a file URL, huh? UIImage * newImage = [[UIImage alloc] initWithContentsOfFile: pathToImage]; if(newImage) { // this "resizedimage" image is what you want to pass to setImage UIImage * resizedImage = [newImage resizedImage: buttonSize interpolationQuality: kCGInterpolationLow]; }