2012-06-05 2 views
3

Я медленно перехожу к новым API-интерфейсам IOS 5 Core Data, и я изучаю около NSConfinementConcurrencyType.Перенос на iOS 5 Core Data новые API: понять NSConfinementConcurrencyType

яблочных документации

конфайнмента (NSConfinementConcurrencyType). Это значение по умолчанию. You обещают, что контекст не будет использоваться ни одним потоком, кроме одного , на котором вы его создали. (Это точно так же, потоковая требование, что вы использовали в предыдущих версиях.)

Дело в том, на самом деле не очевидно для меня смысл умолчанию в этом контексте. Что это значит?

Обычно, если мне нужно выполнить очень длительную операцию импорта на компакт-диске, я настроил новый класс NSOperation и создал собственный контекст.

- (void)main 
{ 
    NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] init]; 

    // other code here... 
} 

Теперь я могу воспользоваться родительским контекстом и выполните следующие действия:

- (void)main 
{ 
    NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] init]; 
    [moc setParentContext:[self masterMoc]]; 

    // other code here... 
} 

это сказал, что о NSConfinementConcurrencyType? Что может быть типичным примером использования?

Заранее спасибо.

ответ

4

Flex_Addicted,

По «умолчанию» Apple означает, что это стандартный способ Основные МОС данных всегда работали. MOC должен быть создан в потоке, на котором он используется. В приведенном выше коде вы используете стандартный исторически эффективный шаблон использования MOC. Другие стили MOC создают и управляют своими собственными фоновыми очередями или привязываются к основной очереди. Это может несколько упростить. Или нет. Прежде всего, они являются блочно-ориентированными интерфейсами к MOC. Иногда это приятно иметь. (Хотя блоки являются новой жаркой, они не являются отличным благ. Я видел блок-код, написанный ленивыми программистами. Они оставляют слишком много сложностей в своих методах. Поддержание такого кода может быть довольно сложным с тонким взаимодействием.)

Идея родительского контекста ортогональна идее ограничения потока. Родительский контекст - это один из способов быстро связать большинство параметров, необходимых MOC. (Apple не совсем понятна, что на самом деле переносится между MOC, и они не обсуждают вопросы политики слияния.) Вам все же приходится ловить, я считаю, уведомления inter-MOC.

Если я могу предложить, не надо думать об этом. Изменения в Core Data для Lion/iOSv5 были довольно скромными.

Andrew

+0

+ 1 для вашей поддержки. Итак, говорят, что создание контекста, как и во втором фрагменте, это то же самое, что и создание конфайнмента? Благодарю. –

+0

С * Идея родительского контекста ортогональна идее ограничения потока. * Вы говорите, что мне нужно продолжать слушать уведомления в основном потоке или нет? Как я понял, при сохранении в фоновом контексте сохранение не записывается на диск, а в память. Сохраняет ли это слияние двух контекстов? –

+0

Flex_Addicted, 'NSConfinementConcurrencyType' - тип контекста по умолчанию. Следовательно, 'NSManagedObjectContext.new' создает один из этих типов. Для получения любого другого типа MOC вам нужно использовать более специфичный инициализатор '-initWithConcurrencyType:'.Andrew – adonoho

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