Приложение, связанное с аварийным сбоем кода, связанное с UIImagePickerController, после 25 или более использования - PullRequest
0 голосов
/ 01 сентября 2009

Я прочитал несколько проблем с утечкой памяти с помощью UIImagePickerController, поэтому я изменил свой код на использование переменной-члена и смог сделать более нескольких снимков с помощью камеры. Тем не менее, я считаю, что фотосъемка занимает все больше и больше времени, и в итоге она потерпела крах около 25 фотографий.

Есть две вещи, которые я делаю после фотографии в didFinishPickingMediaWithInfo,

1) уменьшите изображение и отобразите его (50x50) 2) сохранить 320x460 в CoreData

Я не выпустил ни одного UIImage, поскольку он находится в пуле автоматического выпуска.

Что мне делать, чтобы фотографирование продолжалось вечно?

Ниже приведен журнал сбоя (тип журнала сбоя указан как «Недостаточно памяти»)

CrashReporter Key:   8e197e26271ae3c2c4d3e725807d023e3c2354cb
OS Version:          iPhone OS 3.0 (7A341)

Free pages:        251
Wired pages:       10127
Purgeable pages:   0
Largest process:   Journal

Processes
         Name                 UUID                    Count resident pages
         Journal     8960 (jettisoned) (active)
     debugserver      130
     MobilePhone      529 (jettisoned)
    syslog_relay       53
notification_pro       54
      DTMobileIS     2285
notification_pro       53
            ptpd      276
    mediaserverd      252
     debugserver       77
     debugserver       78
     SpringBoard     2470 (active)
         notifyd       80
        BTServer      123
      CommCenter      262
      accessoryd       84
         configd       70
         configd      266
       fairplayd       67
   mDNSResponder       89
       lockdownd      252
         syslogd       82
         launchd       70

Ответы [ 2 ]

0 голосов
/ 10 декабря 2009

Этот вопрос довольно старый, так что, надеюсь, уже решен, но рассмотрим 2 пункта:

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

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

  • Захват изображения1
  • Хотите взять другого? Захватите изображение 2 и запишите изображение 1 на диск.
  • Сохраните имя файла для Image1 в CoreData для последующего восстановления.

Повторите при необходимости.

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

0 голосов
/ 01 сентября 2009
  • Можете ли вы предоставить обратную информацию / дополнительную информацию о сбое?
  • Можно ли управлять UIImage самостоятельно или обернуть вызов, который дает вам автоматически освобожденный UIImage, своим собственным NSAutoreleasePool, чтобы вы могли контролировать его время жизни?
  • Вы пытались использовать инструменты для обнаружения возможных утечек памяти?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...