Я впервые начал управлять очередями и чувствую, что хорошо разбираюсь в том, как их использовать, и спасибо Apple за то, что они сделали их довольно простыми в использовании.
Однако я столкнулся с проблемой чтения и записи нескольких потоков в одни и те же объекты. В этот вопрос я получил этот прекрасный ответ , и мне остается попросить подтверждения у всех, чтобы убедиться, что я понимаю плюсы и минусы @synchronized
против GCD dispatch_barrier_async
.
Вот как я это вижу:
@synchronized
ПРО:Вы можете обернуть любой объект в @synchronized
, если у вас есть доступ/указатель на него, что упрощает безопасную обработку общих моделей данных из разных объектов в программе
. ПРО:Поддерживается iOS 4 (и, возможно, ранее)
`dispatch_barrier_async` with custom DISPATCH_QUEUE_CONCURRENT
ПРО:Работает быстрее, чем @synchronized
КОН:DISPATCH _QUEUE _CONCURRENT доступно только в iOS 5 (, как обсуждалось здесь), поэтому недоступно для поддержки iOS 4
КОН:Не так просто использовать при управлении чтением/записью объекта из многих других объектов, поскольку очереди легче всего доступны только объекту, который их создает (без какой-либо работы, чтобы обойти это ограничение )
. Таким образом, лучший инструмент зависит от потребностей программы с учетом вышеизложенного.
Если у кого-то есть, что добавить или указать, буду признателен.