Преимущества отправки
Преимущества отправки в основном описаны здесь:
Миграция от потоков
Идея состоит в том, что вы исключаете работу с вашей стороны, так как парадигма легче вписывается в код MOST.
- Это уменьшает потери памяти, которые ваше приложение платит за хранение стеков потоков в пространстве памяти приложения.
- Устраняет код, необходимый для создания и настройки ваших потоков.
- Устраняет код, необходимый для управления и планирования работы над потоками.
- Упрощает код, который необходимо написать..
Опытным путем использование блокировки типа GCD вместо @synchronized
происходит на 80% быстрее или более, хотя микропроцессоры могут быть обманчивы.Подробнее здесь , хотя я думаю, что совет по асинхронности с записью во многих случаях не применим, и он медленнее (но асинхронный).
Преимущества потоков
Почему вы продолжаете использовать темы?Из того же документа:
Важно помнить, что очереди не являются панацеей для замены потоков.Модель асинхронного программирования, предлагаемая очередями, подходит в ситуациях, когда задержка не является проблемой.Хотя очереди предлагают способы настройки приоритета выполнения задач в очереди, более высокие приоритеты выполнения не гарантируют выполнение задач в определенное время.Поэтому потоки все еще являются более подходящим выбором в тех случаях, когда вам нужна минимальная задержка, например, при воспроизведении аудио и видео.
Еще одним местом, где я лично не нашел идеального решения с использованием очередей, является демонпроцессы, которые должны быть постоянно перенесены.Не то, чтобы вы не могли перенести их, но цикл внутри метода NSThread проще (я думаю). Редактировать: Теперь я убежден, что даже в этом контексте блокировка в стиле GCD будет быстрее, и вы также можете сделать цикл внутри операции, отправляемой GCD.
Блоки в Objective-C?
В Objective-C блоки действительно ужасны из-за ужасного синтаксиса (хотя Xcode иногда может помочь с автозаполнением, по крайней мере).Если вы посмотрите на блоки в Ruby (или на любом другом языке), то увидите, насколько они просты и изящны для диспетчерских операций.Я бы сказал, что вы привыкнете к синтаксису Objective-C, но я действительно думаю, что вы привыкнете много копировать из своих примеров:)
Вы можете найти моих примеровотсюда чтобы быть полезным или просто отвлекающим.Не уверен.