2011-11-05 3 views
0

Это может звучать вопрос новичков, однако я новичок в iOS dev.Ошибка утечки памяти при открытии UIPickerController и ее закрытии

У меня следующий код.

- (void) onUploadButtonClick 
{ 
    UIImagePickerController* imgPicker = [[UIImagePickerController alloc] init]; 
    [[[UIApplication sharedApplication] keyWindow] setRootViewController:imgPicker]; 
    imgPicker.delegate = self; 
    imgPicker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; 
    imgPicker.allowsEditing = NO; 
    [self presentModalViewController:imgPicker animated:YES]; 
    [imgPicker release]; 
} 

Я бегу приложение и профилирование на наличие утечек памяти, поэтому, просто нажав на кнопку и закрыть его, не делая ничего, я получаю утечка памяти. Я запускаю это на симуляторе.

Любые идеи, почему это происходит?

UPDATE: Утечка информации из консоли Leaked объекта профилировщика, # Адреса Размер Ответственной библиотеки Ответственного кадра

Malloc 32.50 KB,3 <multiple> 99840 MusicLibrary MemNewPtrClear 
Malloc 32.50 KB, 0xa083800 33280 MusicLibrary MemNewPtrClear 
Malloc 32.50 KB, 0x7840a00 33280 MusicLibrary MemNewPtrClear 
Malloc 32.50 KB, 0x7806a00 33280 MusicLibrary MemNewPtrClear 


Leaked Object,# Address Size Responsible Library Responsible Frame 
Malloc 32.50 KB, 0xa083800 33280 MusicLibrary MemNewPtrClear 


Leaked Object,# Address Size Responsible Library Responsible Frame 
Malloc 32.50 KB, 0x7840a00 33280 MusicLibrary MemNewPtrClear 


Leaked Object,# Address Size Responsible Library Responsible Frame 
Malloc 32.50 KB, 0x7806a00 33280 MusicLibrary MemNewPtrClear 


Leaked Object,# Address Size Responsible Library Responsible Frame 
Malloc 128.00 KB, 0x128de000 131072 MusicLibrary ReadITImageDB 

ответ

1

Почему бы вам когда-нибудь сделать что-то подобное с UIImagePickerController? Вы буквально убиваете своего фактического rootViewController.

[[[UIApplication sharedApplication] keyWindow] setRootViewController:imgPicker]; 

Просто удалите эту линию, и все будет хорошо работать.

+0

Фактически даже при удалении этой строки память все еще протекает. Эта строка должна избегать следующего сообщения в консоли, любым другим способом удалить это сообщение? 2011-11-05 16: 25: 21.791 PostCardPrinter [4769: 207] Использование двухступенчатой ​​анимации вращения. Чтобы использовать более плавную одноэтапную анимацию, это приложение должно удалить двухэтапные реализации. 2011-11-05 16: 25: 21.793 PostCardPrinter [4769: 207] Использование двухступенчатой ​​анимации вращения не поддерживается при вращении более одного контроллера вида или контроллеров просмотра, а не делегата окна. – deimus

+0

Эта ссылка была найдена. Надеюсь, это поможет. http://stackoverflow.com/questions/2878947/getting-using-two-stage-rotation-animation-warning-with-uiimagepickercontrolle – Eugene

+0

Да, так я сделал и разместил в оригинальном посте. Все еще получаю утечку – deimus

1

Вы должны использовать UINavigationController и нажимать на него UIImagePickerController или представить UIImagePickerController в порядке. Установив UIImagePickerController в качестве вашего корневого контроллера, вы теряете предыдущий rootViewController и не сможете вернуться к нему. Утечка памяти может быть связана с тем, что корень UIViewController неправильно реализовал viewDidUnload и методы dealloc.

Смежные вопросы