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 проблемы - отображение против хранения. Настройте отображение правильно, затем подумайте, где хранить данные.