GCD队列而不是锁:读取TableView的CellForrowatIndExpath的数据
-
10-10-2019 - |
题
一个苹果的网站,有建议使用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];
});
}
当您有一个生产者线程同时添加很多推文时,如何处理锁和关键部分,而不是一个一个添加了很多推文,而不是一个一个一个推文,您需要一次阅读一条推文以获取Uaithitview的CellForrowatIndExpath?
如果您在每个“读取”上保留“同步”,这不会导致很多不必要的块吗?这确实是偶尔写的,但是经常阅读场景。
解决方案
如果关注延迟,也许生产者应该一对一地添加推文,因此来自UI线程的dispatch_sync调用保持响应能力。
除非/直到分析表明块上的开销实际上是一个问题,否则我不会担心“很多不必要的块”。毕竟,CellForrowatIndExpath仅被要求使用可见的单元,因此“经常阅读”意味着大约几十次,而不是数千或数百万。
不隶属于 StackOverflow