gpt4 book ai didi

objective-c - 为什么SDImageCache会在init中执行dispatch_sync?

转载 作者:太空狗 更新时间:2023-10-30 03:51:47 26 4
gpt4 key购买 nike

-[SDImageCache initWithNamespace] 执行dispatch_sync 分配NSFileManager。在这里为单行执行 dispatch_async 的基本原理或好处是什么?参见 full code here在第 78 行。

        // Init the disk cache
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
_diskCachePath = [paths[0] stringByAppendingPathComponent:fullNamespace];

dispatch_sync(_ioQueue, ^
{
_fileManager = NSFileManager.new;
});

最佳答案

我无法表达作者的意图,但这是作为实现对象同步的一部分的常见模式,作为编写线程安全代码的一部分。

与其使用锁来同步与对象的交互(请参阅线程编程指南Synchronization 部分),不如使用串行队列(请参阅中的Eliminating Lock-Based Code 部分并发编程指南的em>从线程中迁移一章。

看一眼代码,这似乎是作者的意图(因为似乎与该对象的所有交互都发生在该串行队列上)。假设是这种情况,当使用串行队列促进同步作为更广泛的线程安全应用程序设计的一部分时,明智的做法是将与相关对象的所有交互分派(dispatch)到指定的串行队列,无论分派(dispatch)的代码看起来多么琐碎。可能并非在所有情况下都绝对有必要这样做,但恕我直言,这是一种很好的防御性编程风格。

因此,尽管这个分配看起来微不足道,但它可能是更广泛努力的一部分,以确保与该对象的所有交互都被分派(dispatch)到该 _ioQueue,从而实现对象的线程安全同步和它执行的所有任务。

但你总是可以submit an issue来确认作者的意图。您可能还想检查“责备”日志,看看是否有说明意图的提交注释。

关于objective-c - 为什么SDImageCache会在init中执行dispatch_sync?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23599482/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com