2009-12-31 3 views
1

В последнее время я спрашивал об объектах кругового буфера Obj-C, предполагая, что это лучший способ контролировать тонны данных в UITableView.
Я нашел решение в отношении объектов Circular buffer, но мне было интересно, может быть, лучшее, более быстрое и гораздо более эффективное решение для памяти: вызов моей SQLite DB для обновления UITableView.
В некотором роде - память будет выпущена после обновления UITableView, и не будет необходимости удерживать ссылку на объекты, что будет более эффективно и экономить память, чем удерживать постоянный NSMutableArray со всеми объектами внутри Это.
Вызов базы данных SQLite для обновления UITableView

Как вы подходите к обновлению UITableView с массой данных (объекты 50k), которые также хранятся в базе данных SQLite?

Заранее спасибо, ~ Natanavra.

ответ

3

То, что вы описываете, является именно тем, что было создано для NSFetchedResultsController и является одним из огромных преимуществ использования Core Data на iPhone. С помощью NSFetchedResultsController вы можете настроить запрос на выборку из своей базы данных для элементов, которые будут отображаться в вашем представлении таблицы, и ограничить размер партии предметов, которые будут загружаться в любой момент времени. Это значительно сокращает потребление памяти и время загрузки (я видел 8X улучшение времени загрузки в конкретных примерах).

NSFetchedResultsController был разработан для интеграции с UITableView. Для конкретных примеров я бы посоветовал пример кода Apple, например, их CoreDataBooks, а также соответствующие разделы в Core Data book от Marcus Zarra и iPhone SDK Development book Pragmatic Programmers. Обе эти книги имеют очень хорошие объяснения основных понятий.

+0

Спасибо за ответ; Я недавно изучил CoreData, но моя система уже использует SQLite, и я действительно не хочу менять ядро ​​своего приложения. Я хотел бы знать, что вы думаете о реализации той же функции, для которой был создан NSFetchedResultsController, но с SQLite. Еще раз спасибо за ваш ответ. – natanavra

+0

Моей рекомендацией было бы перенести существующую базу данных SQLite в Core Data. Недавно я завершил такую ​​миграцию для своего приложения, чтобы использовать возможности, предоставляемые Core Data. Моя модель данных была чрезвычайно сложной, но при написании процедуры миграции для нее потребовалось всего несколько дней. Вы потратили гораздо больше времени на реализацию собственного процесса сбора, кэширования и управления памятью, чем просто перенос базы данных на Core Data и использование того, что она предоставляет. –

+0

Я использую sqlcipher, поэтому я не могу использовать Core Data самостоятельно. Я сам пойму на эту проблему, я думаю, что в конце концов мы действительно говорим о том, что вы запрашиваете только те объекты, которые вам нужны, сначала запрашивая количество всех объектов, а затем запрашивая те, которые вам нужны по запросу с OFFSET, установленным в indexPath.row. –

Смежные вопросы