我正在尝试确定swift Calendar结构是否是线程安全的。我发现NSCalendar类是"generally considered to be thread safe“。但是我找不到Calendar结构的特定信息。
我的目标是使用Calendar扩展Date结构,以便与昨天、明天等扩展方法一起使用。我不希望在每次调用时都创建新的Calendar实例。
发布于 2017-08-30 05:48:43
Calendar旨在成为NSCalendar的临时替代品,实际上只是苹果平台上NSCalendar的一个包装器,所以如果NSCalendar是线程安全的,我希望Calendar也是如此。
发布于 2017-08-30 06:05:43
如果您查看了Calendar's source code,您将看不到任何使其线程安全的代码。所以我不这么认为,不同的线程会看到不同版本的Calendar对象字段。
发布于 2019-08-21 02:34:35
不,它不是线程安全的(至少在Linux上运行时是这样)。不确定Darwin的实现是否有所不同。https://bugs.swift.org/browse/SR-11323
如果有人感兴趣,可以在这里找到它的实现:https://github.com/apple/swift-corelibs-foundation/blob/master/CoreFoundation/Locale.subproj/CFCalendar.c
有很多地方会修改“日历->_cal”(在并发调用之间共享),并将其用作临时存储。
https://stackoverflow.com/questions/45948587
复制相似问题