Подтвердить что ты не робот

Правильное использование кеша NSFetchedResultsController

Я использую NSFetchedResultsController для работы с UITableView, и все работает отлично, и я нашел его очень мощным, особенно в сочетании с делегатом результатов. Для сверления таблицы я повторно использую тот же класс контроллера, который получает экземпляр с параметрами, нажимая на строку ячейки, затем контроллер помещается в UINavigationController, а другой вид таблицы создается снова с помощью NSFetchedResultsController.

На этом этапе каждый контроллер имеет свой собственный кеш, а имя кеша выводится с уникальным идентификатором [NSString stringWithFormat "cacheName _% @", uniqueStringForCell], и в конце я, очевидно, могу иметь много кешей.

Теперь вопросы.

1) У многих проблем с кешем может быть проблема?

2) Когда мы должны использовать кеш?

3) В случае deleteCacheWithName, где лучше всего разместить такой метод? Я попытался в viewWillDisappear, но с этим я полагаю, что у меня может быть проблема, когда представление снова появится, а кеш больше не присутствует, например, при использовании с UINavigationController. Вероятно, метод dealloc - лучшее место?

4) Какая связь между управлением кешем и памятью? Я имею в виду, когда отправляется (void) didReceiveMemoryWarning, мне нужно удалить кеш? Если да, как насчет его повторного восстановления? Какой предпочтительный способ, возможно, выдает выборку?

5) контроллер выборки имеет свой делегат, установленный в UITableViewController (fetchController.delegate = self), есть ли проблемы с этим? В каком-то смысле, если в случае изменения предупреждаются более одного контроллера? И deleteCacheWithName также удаляет делегат?

спасибо

4b9b3361

Ответ 1

Ответьте на некоторые вопросы:

1) Наличие нескольких кэшей не является проблемой. Фактически, из справочника Apple:

  • Если у вас есть несколько выбранных контроллеров результатов с разными конфигурации (разные дескрипторы сортировки и т.д.), вы должны дать каждое другое имя кеша.

У меня были проблемы с предыдущими приложениями, где я не делал этого только для получения исключения, которое я потратил впустую на время, пытаясь решить.

2) Мы должны использовать кеш для хранения любой повторяющейся работы, которую должен выполнять NSFetchedResultsController. При изменении раздела или информации о заказе кеш обновляется. Аналогично, если кеш не соответствует текущей информации в базе данных (вы добавили новую строку, удалили и т.д.), Тогда контроллер освободит кеш и очистит его.

3) Я лично поместил deleteCacheWithName в метод viewDidUnload. Не уверен, что это лучшее место или нет.

Не уверен насчет 4. Что касается перестройки кеша - это должно произойти автоматически, если текущий кеш не синхронизирован с приложением. Я не сделал ничего конкретного для управления памятью и кеша в любом из моих приложений.

5) Это не должно быть проблемой. Опять же, из документации Apple:

  • Если вы установите делегат для выбранного контроллера результатов, регистры контроллера для получения уведомлений об изменениях из управляемых контекст объекта. Любое изменение в контексте, которое влияет на набор результатов или информация о секциях обрабатывается, и результаты обновляются соответственно. Контроллер уведомляет делегата, когда объекты результата изменить местоположение или изменить разделы (см. NSFetchedResultsControllerDelegate). Обычно вы используете эти методы для обновления отображения табличного представления.

FYI, вот ссылка на apple dev docs для этого класса: http://developer.apple.com/library/ios/#documentation/CoreData/Reference/NSFetchedResultsController_Class/Reference/Reference.html

НТН