2016-08-03 3 views
0

Я использую CoreData, и я пытаюсь выполнить запрос асинхронной выборки. Объясните мне, пожалуйста, почему я должен использовать метод «performBlock» в этом случаеКогда следует использовать метод «выполнить блокировку»?

[managedObjectcontext performBlock:^{ 
    [managedObjectcontext executeRequest:asyncFetch error:&err]; 
}]; 

если способ работает хорошо?

[managedObjectcontext executeRequest:asyncFetch error:&err]; 

И какие выгоды от использования первого с помощью «выполнить блокировку»?

+0

попробуйте включить отладку потоков данных сердечника – Wain

ответ

2

Методы executeBlock: and performBlockAndWait: используются для отправки сообщений в ваш NSManagedObjectContext, был ли MOC инициализирован с использованием NSPrivateQueueConcurrencyType или NSMainQueueConcurrencyType. Если вы делаете что-либо с одним из этих типов контекста, вы делаете это в блоке.

performBlock: добавит блок в очередь резервного копирования и планирует запустить его в своем потоке. Вы можете использовать это для длительной работы, так как этот блок немедленно вернется.

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

+0

не могли бы вы привести ссылку или ссылку, поскольку мне нужно подробно изучить ее. –

+2

Вы можете прочитать документ яблока https://developer.apple.com/library/ios/documentation/Cocoa/Reference/CoreDataFramework/Classes/NSManagedObjectContext_Class/. Кроме того, я рекомендую http://quellish.tumblr.com/post/93355099502/performblock-vs-performblockandwait – Kunal

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