Утечка памяти в UIImagePicker в iphone - PullRequest
0 голосов
/ 23 декабря 2010

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

Спасибо

Ответы [ 3 ]

5 голосов
/ 24 декабря 2010

Существует известная проблема с uiimagepickercontroller с утечками памяти.

Apple рекомендует выделять и создавать только один один экземпляр и хранить его где-нибудь на весь срок службы приложения (пока он работает).

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

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

0 голосов
/ 23 декабря 2010

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

Если бы это была логическая ошибка в коде или попытка доступа к освобожденному объекту, сбой, вероятно, произошел бы при первой съемке фотографии.

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

0 голосов
/ 23 декабря 2010

Отредактировано : Благодаря CharlieMezak.Да, такая утечка может привести к сбою.Вам лучше выполнить некоторую проверку, основываясь на предложениях CharlieMezak.

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

Я предлагаю вам сначала проверить свойкод, чтобы увидеть, есть ли какой-либо объект автоматического выпуска, о котором не позаботились.

Во-вторых, включите NSZombieEnabled и протестируйте ваше приложение.Если он действительно пытается получить доступ к чему-то, что уже было освобождено (Zombie), консоль покажет вам.

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

...