2010-06-11 2 views
1

Когда выбран управляемый объект, а интервал времени готовности установлен в 5 минут, что происходит через 10 минут, когда я получаю доступ к свойству этого объекта?Для чего нужен промежуток времени готовности?

Может ли Core Data выполнить новый запрос на выборку? Имеет ли это смысл? Я не могу представить себе ситуацию, когда данные уже кэшируются, но объект является ошибкой. Когда это может произойти?

ответ

3

От Core Data Programming Guide: Using Managed Objects

Обратите внимание, что объекта интервал устаревания является время, которое имеет не пройти до магазина повторного выбирает снимок. Поэтому это влияет только на ошибки - кроме того, это всего лишь , относящихся к магазинам SQLite (остальные магазины никогда не возвращаются, поскольку полный набор данных хранится в памяти).

Это влияет только на полноценные объекты - это не влияет на те, которые являются разломами

Вам действительно нужно только возиться с этим в сложных установках (т.е. «объекты-призраки» без заселенных атрибутов.) где у вас есть несколько контекстов, которые меняют хранилище одновременно. В приложениях iOS это редко необходимо.

+0

Теперь это смущает - я думал, что ошибка - призрак? – dontWatchMyProfile

+2

Они есть. Тем не менее, «стрельба по ошибке» означает заполнение атрибутов объектов. Если неисправности являются «призраками», то «срабатывание сбоя» и «нарушение» означают «материализоваться» или «делать конкретные». Терминология развивалась в течение нескольких десятилетий и довольно запутанна. Многие авторы получают это назад, что только ухудшает его. – TechZen

+0

Я отредактировал ответ, чтобы уточнить, что ошибки и призраки - одно и то же, поэтому реакция dontWatchMyProfile может показаться странной. – Felixyz

1

Если объект не является ошибкой, но полностью реализованный объект (его свойства были заполнены), то ничего не произойдет, если вы получите доступ к свойству этого объекта за 10 минут.

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

Да, может быть ситуация, когда данные уже кэшированы, а объект является ошибкой. Вы можете сделать это сами, обрезая граф объектов, чтобы разбить сильные ссылочные циклы отношений.

Когда у вас есть отношения между управляемыми объектами, каждый объект поддерживает сильную ссылку на объект или объекты, с которыми он связан. Это может привести к сильным опорным циклам. Чтобы гарантировать, что ссылочные циклы будут нарушены, когда вы закончите с объектом, вы можете использовать метод контекста управляемого объекта refreshObject: mergeChanges: превратить его в ошибку.

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