在Objective-C(和Swift)中,弱属性线程安全吗? 阅读任务

当由于最后一个强引用消失了而使它们无效时,如果在另一个线程上发生问题,您会遇到问题吗?如果是这样,使用原子能正确吗?由于我相信Swift没有原子,因此那里的线程安全弱属性需要什么?

zrchuo 回答:在Objective-C(和Swift)中,弱属性线程安全吗? 阅读任务

weak是ARC的一部分,Clang承诺以您所描述的方式将其视为原子的。尤其请参见Clang的自动引用计数文档中的4.2 Semantics部分。

对此部分特别感兴趣的是以下部分(强调):

阅读

  

对于__weak对象,将保留当前指针,然后在当前全表达式的末尾将其释放。 这必须在任务分配和最终发布时自动执行。

任务

  

对于__weak对象,除非新指针是当前正在释放的对象,否则将更新左值以指向新指针,在这种情况下,左值将更新为空指针。 这必须针对对象的其他分配,从对象中读取以及新指针的最终发布以原子方式执行。

请注意,许多其他操作不是原子操作,特别是强分配(例如,在两个不同的线程上分配强属性)。但是保留计数本身是线程安全的,这确实是您在此担心的部分。您可以自由地在任何线程上保留和释放对象,并且最后的保留计数将是正确的,包括由于weak分配而导致的“隐式”释放。这是以下所有直接结果:

所有这些结果的结果是,与可可的大多数部分不同,引用计数几乎总是在所有线程之间进行安全处理。

,

Swift中几乎没有任何东西本质上是线程安全的-不是引用,不是弱引用,不是数组,不是字符串或任何其他可变值。

如果要对两个线程中的任何内容进行写/读或写/写访问,则必须使用锁来确保安全。

https://medium.com/@mohit.bhalla/thread-safety-in-ios-swift-7b75df1d2ba6

此链接应该有帮助!

本文链接:https://www.f2er.com/3070759.html

大家都在问