一个苹果的网站,有建议使用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仅被要求使用可见的单元,因此“经常阅读”意味着大约几十次,而不是数千或数百万。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top