На одном сайте Apple есть шаблон для использования очередей GCD вместо блокировок:
// Create queue early
queue = dispatch_queue_create("com.example.tweets", NULL);
// executed main thread
- (NSArray *)getTweets
{
__block NSArray *a;
dispatch_sync(queue, ^{
a = [tweets copyTweets];
});
return a;
}
// executed on background thread
- (void)addTweet:(Tweet *)tw
{
dispatch_async(queue, ^{
[tweets addTweet:tw];
});
}
Как вы справляетесь с блокировками и критическими разделами с GCD, когда у вас есть поток продюсера, добавляющий много твитовсразу, а не по одному, и вам нужно читать по одному твиту за раз для cellForRowAtIndexPath UITableView?
Если вы сохранили «синхронизацию» при каждом «чтении», не вызовет ли это много ненужногоблоки?Это действительно время от времени пишет, но часто читает сценарий ..