2012-03-12 10 views
7

Widziałem, jak to się dzieje, używając instrumentów do mojej aplikacji. Kiedy profilowałem swoją aplikację, zajęta początkowa pamięć to 563 KB, która pojawia się przed wyświetleniem UIImagePickerController. Jest jeden przycisk na pierwszym viewController, który powoduje pojawienie się UIImagePickerController.
Po pojawieniu się UIImagePickerController pamięć zajęta przechodzi do stanu 1,6-1,7 MB. Jeśli wybiorę dowolny obraz lub anuluję UIImagePickerController, zajmowana pamięć to nadal 1,6 - 1,7 MB, która moim zdaniem powinna być 563 KB (lub może być trochę większa od KB).
proszę zobaczyć poniższy kod użyłem:UIImagePickerController nie zwalnia pamięci, którą zajmuje

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

Dlaczego pamięć nie zostanie wydana?

enter image description here

+0

Czy patrząc na 'ogólnej bytes' zajętego lub' żywo bytes'?Z oczywistych powodów "ogólna liczba bajtów" nigdy nie spadnie ... – tipycalFlow

+0

Tak, patrzę na całkowite bajty. Ale dlaczego nie zmniejszy się? – Nitish

+0

Jest to niewidoczna suma wszystkich bajtów, które kiedykolwiek zostały dodane do pamięci. Po zwolnieniu pamięci suma nie zmniejsza się. Po lewej stronie "ogólnych bajtów" musi znajdować się kolumna "żywych bajtów". Obserwuj wartości z tej kolumny, a na twoje pytanie odpowiesz! – tipycalFlow

Odpowiedz

1

Nie możemy dodawać zdjęć do komentarzy, więc umieszczam to jako odpowiedź. Modele Live Bytes są zawsze mniejsze niż Overall Bytes, z wyjątkiem sytuacji, gdy po raz pierwszy pamięć zostanie zwolniona. Można to zobaczyć na poniższym obrazku.

enter image description here

Nie sądzę, jest coś nie tak z dealokacji. Myślę, że patrzysz na niewłaściwe wartości!

EDIT- Myślę, że problem może być gdzie indziej. Aby zobaczyć wartości, które widziałem, musisz dokonać niewielkiej zmiany. Jak pokazano na poniższym obrazku, odznacz opcję Only track active allocations, aby zobaczyć wartości, których szukasz. Jeśli nadal widzisz 7.41 MB w Active allocations, to jest coś innego.

enter image description here

+0

Proszę zobaczyć moje edytowane pytanie. Dodałem zrzut ekranu. Bajty na żywo są takie same jak ogólna liczba bajtów – Nitish

+0

@Nitish Spróbuj trochę zmienić, o której wspomniałem w swojej edycji. – tipycalFlow

+0

Ale jak odznaczyć to. Opcja edycji nie jest dostępna tutaj. – Nitish

0

spróbować tej

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

Próbowałem już to. – Nitish

+0

Nie próbowałeś autorelease zamiast autorelease release memory w tym czasie. oraz w '- (void) selektorze imagePickerController: (UIImagePickerController *) didFinishPickingMediaWithInfo: (NSDictionary *) info' metoda write' [picker dismissModalViewControllerAnimated: YES]; ' – hchouhan02

1

Ponieważ dałeś to autorelease opcji zostanie on dodany do puli autorelease ... zobacz co mówią dokumentacja ..

Zestaw aplikacji tworzy pulę autorelease na głównym wątku pod na początku każdego cyklu pętli zdarzeń i usuwa ją na koniec, zwalniając w ten sposób wszystkie autorejestrowane obiekty generowane podczas przetwarzania zdarzenia.

zawsze można zwolnić kompletacji w wywołaniu delegata tak ..

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

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

} 
+0

Masz rację Ankit. To, co zasugerowałeś, jest najnowszą próbą. – Nitish

0

Czy można ustawić delegata do nil?

Więcej informacji można zwrócić się do UIImagePickerConrtoller class reference

[picker release]; 
picker.delegate = nil ; 

Nadzieja to pomaga.

+0

Nadal nie działa. – Nitish

+0

@Maulik: Edytowałem odpowiedź i dodałem odwołanie do klasy dla UIImagePickerController, ponieważ odpowiedź pojawiła się pod "Postem o niskiej jakości". –

+0

@ParthBhatt: dzięki ... gdzie znalazłeś post niskiej jakości ??? Nie wiem o tym ...; D – Maulik

Powiązane problemy