2012-03-12 17 views
7

Vi esto en el uso de instrumentos para mi aplicación. Cuando perfilo mi aplicación, la memoria inicial ocupada es 563 KB que está antes de que aparezca UIImagePickerController. Hay un botón en el primer ViewController que hace que aparezca UIImagePickerController.
En cuanto aparece UIImagePickerController, la memoria ocupada va hasta 1.6 - 1.7 MB. Si selecciono cualquier imagen o cancelo UIImagePickerController, la memoria ocupada sigue siendo 1.6 - 1.7 MB que creo que debería ser 563 KB (o pueden ser pocos KB más).
Por favor ver el siguiente código que he utilizado:UIImagePickerController no libera la memoria que ocupa

- (IBAction)chooseButtonPressed:(id)sender 
{ 
    UIImagePickerController *pickerController = [[UIImagePickerController new]autorelease]; 
    [pickerController setSourceType:UIImagePickerControllerSourceTypePhotoLibrary]; 
    [pickerController setDelegate:self]; 
} 

¿Por qué no se libera la memoria?

enter image description here

+0

usted está mirando el 'bytes' global ocupada o el' bytes' vivo?Por razones obvias, 'bytes totales 'nunca disminuirán ... – tipycalFlow

+0

Sí, estoy buscando bytes generales. Pero ¿por qué no va a disminuir? – Nitish

+0

Es una suma ciega de todos los bytes que alguna vez se han agregado a la memoria. Cuando se libera memoria, la suma no disminuye. Justo a la izquierda de 'bytes globales ', debe haber una columna de' bytes vivos '. ¡Observe los valores en esta columna y su pregunta será respondida! – tipycalFlow

Respuesta

1

No podemos agregar imágenes a los comentarios, así que lo estoy poniendo como una respuesta. El Live Bytes siempre es menor que el Overall Bytes excepto hasta la primera vez que se desasigna una memoria. Esto se puede ver en la imagen a continuación.

enter image description here

No creo que haya nada malo con su desafectación. ¡Creo que solo estás mirando los valores equivocados!

EDITOR Creo que el problema podría ser otro. Para ver los valores que estaba viendo, necesitas hacer un pequeño cambio. Como se muestra en la imagen a continuación, debe desmarcar la opción Only track active allocations para ver los valores que está buscando. Si aún ve 7.41 MB en Active allocations, entonces el problema es otra cosa.

enter image description here

+0

Por favor, vea mi pregunta editada. He agregado una captura de pantalla. Live Bytes es el mismo que el de Bytes generales – Nitish

+0

@Nitish Por favor, prueba el pequeño cambio que he mencionado en mi edición. – tipycalFlow

+0

Pero cómo desmarcar esto. La opción de edición no está disponible aquí. – Nitish

0

probar este

UIImagePickerController *picker = [[UIImagePickerController alloc] init]; 
picker.delegate = self; 
picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 
[self presentModalViewController:picker animated:YES]; 
[picker release]; 
+0

lo intenté ya. – Nitish

+0

no ha probado la liberación automática en lugar de la liberación automática de la memoria de liberación en ese momento. y en '- (void) imagePickerController: (UIImagePickerController *) selector didFinishPickingMediaWithInfo: (NSDictionary *) info' método write' [picker dismissModalViewControllerAnimated: YES]; ' – hchouhan02

1

Puesto que usted ha dado opción se conseguirá agregado a la piscina autorelease que AutoRelease ... ver lo que dice la documentación ..

El El Kit de aplicaciones crea un grupo de autorrelease en el hilo principal al al comienzo de cada ciclo del ciclo de eventos, y lo drena en el fin, liberando así cualquier objeto liberado automáticamente generado mientras se procesa un evento .

siempre se puede liberar el selector en la llamada delegado como esto ..

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{ 
... 
... 
[picker release]; 

} 
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{ 
.... 
.... 
[picker release]; 

} 
+0

Tienes razón, Ankit. Lo que has sugerido es lo último que intenté. – Nitish

0

¿Ha definido delegado a nil?

Para más información puede consultar UIImagePickerConrtoller class reference

[picker release]; 
picker.delegate = nil ; 

la esperanza que esto le ayuda.

+0

Todavía no funciona. – Nitish

+0

@Maulik: Edité la respuesta y agregué la referencia de clase para UIImagePickerController, ya que la respuesta aparecía en "Publicación de baja calidad". –

+0

@ParthBhatt: gracias ... ¿dónde encontraste Low Quality Post ??? No lo sé ...; D – Maulik

Cuestiones relacionadas