0

Страницы 37 и 39 Руководства по параллельному программированию (версия PDF) кажутся противоречиями. В странице 37, фрагмент кода определяет следующие:Вызов detachNewThreadSelector: target: object: vs dispatch_async()

if (![anOp isConcurrent]) 
    [anOp start]; 
else 
    [NSThread detachNewThreadSelector:@selector(start) toTarget:anOp withObject:nil]; 

Это выглядит хорошо, за исключением того, что в странице 39 к документации состояния:

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

Таким образом, вместо вызова detachNewThreadSelector: target: object :, почему вместо этого не вызывает вызов dispatch_async()?

ответ

0

Е. Я вижу, что вы говорите. Я думаю, что каждый способ работает, но в зависимости от ситуации вы должны выбрать, какой корень должен идти. Следует отметить, что NSOperationQueues хороши для использования; в mac osx они используют GCD для оптимизации, поэтому они являются хорошим выбором. В iOS 4 и ниже они этого не делают. Поэтому использование GCD - это то, что вы должны серьезно рассмотреть, работая над предыдущими версиями iOS. Если вы отправляете новый NSThread, ОС должна продолжать переключать потоки, которые могут быть проблемой производительности. GCD использует подход к пулам, что означает, что он будет использовать существующие потоки, если это хорошо.

Надеется, что это указует вам в правильном направлении

+2

С прошивкой 4, NSOperationQueue использует НОД. [Справочник по классу NSOperationQueue] (http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/NSOperationQueue_class/Reference/Reference.html) – titusmagnus

+0

Я стою исправлен, спасибо titusmagnus – geminiCoder

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