Как наиболее эффективно (с точки зрения как памяти, так и производительности) загрузить uitableview с большим количеством записей? - PullRequest
0 голосов
/ 02 сентября 2011

У нас есть веб-сервисное приложение для iPhone, которое извлекает короткие тексты (без графики) с шагом 10 записей - пользователь может загрузить больше записей, нажав кнопку «Загрузить больше».(похоже на «загрузить еще 25» в приложении App Store по умолчанию)

В настоящее время NSXMLParser используется для анализа XML, записи сохраняются затем в NSMutableArray и новых записях (из «загрузить больше»)добавлены в массив.

Теперь мы столкнулись с двумя проблемами, которые, по нашему мнению, связаны с нашим текущим методом хранения записей в ОЗУ.Это:

  1. В условиях нехватки памяти, когда мы переключаемся обратно в приложение из переключателя приложений, а затем нажимаем кнопку «назад» в подробном представлении, приложение либо аварийно завершает работу, либо перезагружает представление таблицы!
  2. После загрузки всего 400 записей приложение вылетает!

Чтобы справиться с этими проблемами, нужно ли будет просто сохранять записи в SQLite (или Core Data) вместо массива?Или нам нужно сделать что-то еще / другое?

Пожалуйста, руководство!

Спасибо!

Ответы [ 3 ]

0 голосов
/ 02 сентября 2011
  1. Вы должны переопределить didReceiveMemoryWarning: в вашем контроллере представления, если вы не хотите, чтобы представление было освобождено, когда появляется предупреждение памяти.Это может быть связано с этим.Кроме того, ваш метод viewDidLoad должен воссоздать состояние просмотра, гарантируя, что ни один элемент интерфейса не будет освобожден или nil.
  2. Если вы выделите слишком много памяти за один раз, служба iOS Watchdog убьетВаше приложение, потому что оно подозревает, что приложение приведет к тому, что объем выделенной памяти достигнет 100% (после чего происходят плохие вещи).Также возможно, что если вы используете методы UITableView для добавления дополнительных записей в конец списка (insertRowsAtIndexPaths:withRowAnimation:), это может привести к выбрасыванию NSInconsistencyException при интенсивном и / или повторном использовании.Если ваши методы загрузки асинхронные, то, возможно, просто не был готов вовремя или произошел сбой сети, и вызов вставки для вашего массива не вставил полное количество строк, что вызовет сбой приложения, если количество строк не соответствует методу источника данных numberOfRowsInSection:.
0 голосов
/ 04 сентября 2011

решил ... после прочтения @ комментария Стивена ... Я убедился, что это не проблема с памятью ... поэтому я продолжил копать и нашел проблему.

На самом деле у меня есть метод deselectRowAtIndexPath в табличном представлении. И в условиях нехватки памяти iPhone выпускает записи, хранящиеся в памяти ... поэтому в этой ситуации deselectRowAtIndexPath не указывал ни на что, что вызывало сбой ... изменил и исправил это сейчас!

Спасибо!

0 голосов
/ 02 сентября 2011

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

Вы профилировали свой код? Попробуйте Инструменты . Кроме того, как вы работаете с viewWillDisappear и viewDidDisappear, когда вы запускаете и возвращаетесь из переключателя приложений? Вы dealloc или release что-то, когда вы переключаете представления?

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