Проблема утечки памяти с UIImagePickerController - PullRequest
1 голос
/ 28 января 2009

Я получаю утечку памяти с помощью класса UIImagePickerController.

Вот как я его использую:

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

Чтобы снять сборщик, я звоню [picker dismissModalViewControllerAnimated:YES]; в didFinishPickingImage и imagePickerControllerDidCancel.

-

Инструменты показывают около 160 байт утечки в результате этой инструкции:

+[UIImagePickerController _loadPhotoLibraryIfNecessary]

Видимо, эта проблема беспокоит многих людей, и ее решение чтобы избежать этой проблемы, чтобы построить синглтон класс, посвященный комплектации изображения из библиотеки или захвата с помощью Устройство встроено в камеру.

Кто-нибудь хочет что-то добавить?

Ответы [ 5 ]

2 голосов
/ 28 января 2009

Как автор одной из первых статей о необходимости использования синглтона, мотивация состояла в том, чтобы предотвратить сбой при съемке 7/8-го изображения, а не из-за какого-либо особого беспокойства по поводу утечки , 160 байт раздражает, но не является большой проблемой, и поэтому не стоит беспокоиться (потому что это не может быть исправлено разработчиками).

0 голосов
/ 30 августа 2011

Возможно, причина в том, что вы забыли выпустить изображение. Потому что каждый раз, когда вы пишете

UIImageView.image = image_a;

Тогда image_a будет сохранено один раз.

Пока вы не позволите UIImageView.image = nil, когда image_a можно будет наконец выпустить.

Я решил свою проблему таким образом.

0 голосов
/ 26 января 2011

У меня была утечка памяти, которую я обнаружил в Инструментах. Все, что я делал, это открывал и закрывал средство выбора изображений (открывал / отменял) и использовал код Apple, мой код и код других людей.

Все показывали, что распределение увеличивается и увеличивается каждый раз, как будто сборщик не освобождается. Если вы попытаетесь выпустить его, произойдет сбой (слишком много).

Затем я нашел действительно полезную веб-страницу, на которой было написано:

«Этого не происходит при тестировании на устройстве»

Итак, я переключился с симулятора и запустил тесты на устройстве. Вот, не было никакого увеличения ассигнований, и он вел себя нормально.

Это, однако, абсолютно зло, и теперь мы не можем доверять симулятору для выполнения надежной работы. Независимо от того, относится ли это к вашей конкретной проблеме или нет, я попросил вас добавить еще кое-что, и я хочу добавить, что не проверяйте память на симуляторе!

0 голосов
/ 10 мая 2010

Если вы видите утечки памяти несколько GeneralBlock и SegmentMachO с помощью UIImagePickerController,

Попробуйте добавить в ваш проект инфраструктуру CoreLocation и MapKit. Я больше не вижу утечек памяти при проверке утечек инструмента. Я не знаю, как UIImagePickerController связано с этими структурами. Я не уверен, что это хорошее решение или нет. «добавление фреймворков без использования или необходимости».

Я также получил утечку памяти при использовании UIImagePickerController. Эта утечка памяти происходит даже в примерах кода «PhotoLocation» и «iPhoneCoreDataRecipes», загруженных с developer.apple.com . Я также проверил, добавив эти фреймворки в загруженный пример кода. Больше нет утечек памяти.

0 голосов
/ 28 января 2009

Вы пытались удалить строку делегата? У меня были похожие проблемы с AVAudioPlayer при делегировании на self. (Даже несмотря на то, что в обоих случаях средство доступа говорит assign.) Если утечка исчезает при делегировании, вы можете делегировать другому объекту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...