iPhone NSMutableArray против SQLite

У меня есть каталог, разработанный для iPhone, который является моим первым приложением. Из-за этого у меня возникают некоторые проблемы с утечками памяти и сбоем приложения, когда в каталоге более 55 фотографий. (Я объясню, когда он падает)

Я уже тестировал с помощью Leaks Performance Tools и успешно устранил утечки, но мое приложение по-прежнему зависало.

Мой класс данных имеет 5 NSMutableArrays. 1 имеет 50 элементов UIImage для Portrait. Второй имеет 25 элементов UIImage для Landscap (каталог использует 2 портрета в 1 ландшафтном изображении). Другие имеют 50 NSNumber для эталонного изображения положения портретного массива в альбомном массиве. Два других имеют 50 элементов NSString с (1) именем и (2) адресом изображений значков. Один объект класса данных создается в AppDelegate (загрузка приложения).

Я запускаю каталог в Portrait, создавая виды, передавая массив Portrait (с UIImages). Когда устройство поворачивается влево, я переделываю виды (освобождая старые виды), проходящие через массив Array. В xCode все работает нормально!!! В устройстве, когда я поворачиваю устройство влево (чтобы переделать представления), иногда (я заметил, когда у меня открыты другие приложения) приложение вылетает с сообщением: "Программа получила сигнал:" 0 ". Форматировщики данных временно недоступны"

Я знаю, что это сообщение относится к проблеме утечки памяти, поэтому мой вопрос:

Использование SQLite для хранения моих данных (на самом деле в NSMutableArrays) я получу производительность памяти? Я новичок в SQLite для iPhone. Есть ли другое решение для хранения моих данных?

Спасибо всем, ребята!!!

2 ответа

Этот вопрос меньше о NSMutableArrayс против SQLite и больше об использовании памяти. UIImage обычно потребляет много памяти и должен быть освобожден, когда он не нужен, что обычно происходит, когда он не виден. Ваше приложение может иметь 0 утечек, но все равно будет зависать. Вам нужно будет зарегистрироваться для UIApplicationDidReceiveMemoryWarningNotification уведомления и действовать соответственно. UIViewControllerы уже отвечают на - (void)didReceiveMemoryWarning который вы можете переопределить. Теперь для хранения этих образов на диске, когда вам нужно освободить память, вы можете использовать SQLite или, что я бы порекомендовал, просто создать папку кеша.

Мне нравится SQLite в качестве решения. Легко предоставить предварительно заполненную БД, и помимо этого вы просто подключаете свое приложение к некоторым методам, которые могут добавлять / удалять / обновлять записи.

Ваша проблема не будет решена с помощью SQLite - проблема с управлением памятью. Получите это неправильно, и не имеет значения, где вы храните свои данные.

Разделите 2 проблемы - отображение против хранения. Настройте отображение правильно, затем подумайте, где хранить данные.

Другие вопросы по тегам