2012-03-12 11 views
7

Ho visto questa cosa sull'uso degli strumenti per la mia app. Quando registro la mia app, la memoria iniziale occupata è 563 KB che precede lo UIImagePickerController. C'è un pulsante sulla prima viewController che fa apparire il UIImagePickerController.
Non appena viene visualizzato UIImagePickerController, la memoria occupata sale a 1.6 - 1.7 MB. Se seleziono un'immagine o annullo lo UIImagePickerController, la memoria occupata è ancora 1.6 - 1.7 MB che credo dovrebbe essere 563 KB (o potrebbe essere qualche KB in più).
prega di consultare il codice qui sotto ho usato:UIImagePickerController non rilascia memoria occupata

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

Perché la memoria non viene rilasciato?

enter image description here

+0

stai guardando il 'bytes' complessiva occupata o bytes'' dal vivo?Per ovvi motivi, 'byte globali 'non diminuiranno mai ... – tipycalFlow

+0

Sì, sto guardando i byte complessivi. Ma perché non diminuirà? – Nitish

+0

È una somma cieca di tutti i byte che sono mai stati aggiunti alla memoria. Quando la memoria viene rilasciata, la somma non viene diminuita. A destra di 'byte globali', deve esserci una colonna di' byte live'. Osserva i valori in questa colonna e la tua domanda riceverà una risposta! – tipycalFlow

risposta

1

Non possiamo aggiungere immagini ai commenti, quindi sto mettendo questo come risposta. Gli Live Bytes sono sempre inferiori allo Overall Bytes tranne che fino alla prima volta che una memoria viene deallocata. Questo può essere visto dall'immagine qui sotto.

enter image description here

Io non credo che ci sia qualcosa di sbagliato con il tuo deallocazione. Penso che stai solo guardando i valori sbagliati!

EDIT- Penso che il problema potrebbe essere da qualche altra parte. Per vedere i valori che stavo vedendo, è necessario apportare un piccolo cambiamento. Come mostrato nell'immagine qui sotto, è necessario deselezionare l'opzione Only track active allocations per vedere i valori che stai cercando. Se vedi ancora 7.41 MB in Active allocations, il problema è un'altra cosa.

enter image description here

+0

Si prega di vedere la mia domanda modificata. Ho aggiunto una schermata. Byte dal vivo è uguale a Byte complessivo – Nitish

+0

@Nitish Si prega di provare il piccolo cambiamento che ho citato nella mia modifica. – tipycalFlow

+0

Ma come deselezionare questo. L'opzione di modifica non è disponibile qui. – Nitish

0

provare questo

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

ho già provato questo. – Nitish

+0

no hai provato la autorelease invece della memoria di rilascio autorelease in quel momento. e in '- (void) imagePickerController: (UIImagePickerController *) picker didFinishPickingMediaWithInfo: (NSDictionary *) info' metodo write' [picker dismissModalViewControllerAnimated: YES]; ' – hchouhan02

1

Dal momento che avete dato AutoRelease opzione otterrà aggiunto al pool autorelease ... vedere quello che dicono la documentazione ..

Il Application Kit crea un pool autorelease sul thread principale a l'inizio di ogni ciclo del ciclo degli eventi e lo drena allo fine, rilasciando quindi tutti gli oggetti autoreleased generati mentre elabora un evento.

si può sempre rilasciare il selettore nella chiamata delegato come questo ..

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

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

} 
+0

Hai ragione Ankit. Quello che hai suggerito è l'ultimo che ho provato. – Nitish

0

Avete impostato delegato nil?

Per maggiori informazioni è possibile consultare UIImagePickerConrtoller class reference

[picker release]; 
picker.delegate = nil ; 

Spero che questo ti aiuta.

+0

Ancora non funziona. – Nitish

+0

@Maulik: ho modificato la risposta e aggiunto il riferimento di classe per UIImagePickerController come la risposta è stata visualizzata in "Post di bassa qualità". –

+0

@ParthBhatt: grazie ... dove hai trovato un post di bassa qualità ??? Non ne sono a conoscenza ..; D – Maulik

Problemi correlati