Faulting и Uniquing в Core Data

Cocoa

Faulting (понижение к неинициализации или сбросу) является механизмом Core Data используемым, чтобы уменьшить использование памяти вашим приложением. Сопутствующая функция называется uniquing (уникальность), которая гарантирует, что в данном контексте управляемого объекта, вы никогда не будете иметь более одного управляемого объекта для представления конкретной записи (на подобии первичного ключа в РСУБД).

Faulting ограничение размера графа объектов

Faulting уменьшает объем памяти, потребляемый приложением. Fault является прототипом объекта, который представляет собой управляемый объект, который еще не был полностью реализован, или коллекцию объектов, которые представляют отношения:

  • Управляемый объект понижает экземпляр соответствующего класса, но его постоянные переменные не инициализируются.
  • Отношение понижения является подклассом класса коллекции, который представляет отношения.

Faulting позволяет Core Data поставить границы на объект графа.

Для примера рассмотрим приложение, которое позволяет пользователям получать и редактировать информацию об одном сотруднике (employee). Сотрудник (employee) имеет отношения к менеджеру (manager) и к отделу (department), и эти объекты в свою очередь имеют, другие отношения. Если вы получите только один объект сотрудник (Employee) из постоянного хранилища, его отношения: менеджер (manager), отдел (department) и отчеты (reports) изначально представлены как fault. На рисунке ниже показан отдел сотрудника и отношения представленые как fault.

core data faulting

Таким образом для редактирования только одного сотрудника, мы имеем экземпляр класса отдела (Department) как fault, т.е. с неинициализированными переменными, а также не загруженной в память всей остальной структурой компании.

Fault обрабатывается прозрачно, и вы не должны выполнить выборку для реализации fault. Если на каком-то этапе постоянное свойство fault объектf доступyj, то Core Data автоматически извлекает данные для объекта и инициализирует объект.

Пробуждение Fault-ов

Core Data автоматически пробуждает fault-ы в случае необходимости. Однако, пробуждение fault индивидуально может выглядеть неэффективным, и есть более эффективные стратегии для получения данных из постоянного хранилища.

При пробуждении fault Core Data не обращается к постоянному хранилищу, если данные присутствуют в кэше. Иначе Core Data извлекает данные из хранилища, при этом кэшируя их в памяти.

Приведение объектов к Fault

Приведение реализованного объекта к fault может быть полезно при обрезке объекта графа, а также обеспечение значениями текущих свойств. Приведение управляемого объекта в fault освобождает ненужную более память, устанавливая его значение свойства в памяти к нулю, и ломает сильные ссылки на связанные объекты.

Вы можете превратить реализованный объект в fault с помощью метода refreshObject:mergeChanges:. Если указали NO в качестве аргумента mergeChanges, вы должны быть уверены, что нет никаких изменений в отношениях этого объекта. Если они есть, и вы сохраните контекст, то это приведет к проблемам с целостностью в постоянном хранилище.

Когда объект превращается в fault, он отправляет didTurnIntoFault сообщение. Вы можете реализовать собственный метод didTurnIntoFault для выполнения различных собственных функций.

Uniquing обеспечивает одиночный управляемый объект в соответствие с записью в контексте

Core Data гарантирует, что с данным управляемым объектом контекста, входящем в постоянное хранилище связан только один управляемый объект. Эта техника известна как uniquing. Без uniquing, вы могли бы в конечном итоге оказаться с контекстом поддерживающем более одного объекта для представления заданной записи.

Предположим, что мы работаем сразу с двумя сотрудниками из разный отделов, в этом случае в памяти будут распологаться два объекта Employee и два объекта Department в качестве fault, как показано ниже:

core data faulting
 
core data faulting

Если же сотрудники относятся к одному и тому-же отделу, то Core Data, поймет это исходя из отношений, связывающих каждого сотрудника (Employee) с его объектом Department и создаст только один уникальный объект Department как fault, что в свою очередь, при изменении и сохранении данных, сохранит целостность в постоянном хранилище.

core data faulting uniquing
 
 
homeЗаметили ошибкукарта сайта 
   Made on a Mac