Ответ 1
Ну, несколько вещей, чтобы указать:
1) Когда вы используете @synchronized, он извлекает фрейм для исключений WHOLE для iOS (или OSX) для приложения. Я знаю об этом на OSX, и он имеет влияние на производительность там, не могу сказать наверняка на iOS, но ожидал бы того же. Тем не менее, это использование кувалды для вождения в гвоздь - эта возможность была вокруг, прежде чем были доступны другие варианты. Я лично избегаю его использования, как чума, и портировал другие рамки с открытым исходным кодом для использования семафоров отправки (я благодарю Майка Эша (снова) за это!)
2) Ваш комментарий о "DISPATCH_QUEUE_CONCURRENT" - это красная селедка рода - с iOS 4 система предоставила вам 3 параллельные очереди, поэтому вы действительно нажимаете конверт, если вам нужно определить свой собственный. При отправке у вас есть асинхронные и синхронизирующие, последовательные и параллельные группы, на которые вы можете дождаться, после отправки. Здесь есть такое богатство, как вы могли даже думать об 1). Чем больше вы используете блоки, тем больше вы их будете использовать!
EDIT: Я использовал пользовательские параллельные очереди в моем приложении iOS 4.3 вместе со всеми методами барьера Майка Эша. Файл queue.h показывает его как доступный:
__OSX_AVAILABLE_STARTING(__MAC_10_6,__IPHONE_4_0)
DISPATCH_EXPORT DISPATCH_CONST DISPATCH_WARN_RESULT DISPATCH_NOTHROW
dispatch_queue_t
dispatch_get_global_queue(dispatch_queue_priority_t priority, unsigned long flags);
/*!
* @const DISPATCH_QUEUE_SERIAL
* @discussion A dispatch queue that invokes blocks serially in FIFO order.
*/
#define DISPATCH_QUEUE_SERIAL NULL
/*!
* @const DISPATCH_QUEUE_CONCURRENT
* @discussion A dispatch queue that may invoke blocks concurrently and supports
* barrier blocks submitted with the dispatch barrier API.
*/
#define DISPATCH_QUEUE_CONCURRENT (&_dispatch_queue_attr_concurrent)