首页 > 解决方案 > @NSManaged 属性线程安全吗?

问题描述

例如在这种情况下:

@NSManaged public var myProperty: SomeType

func someFunc() {
    concurrentNSManagedObjectContext.perform {
        doSomething(with: self.myProperty)
    }
}

如果是,最佳做法是什么?

标签: iosswiftcore-dataconcurrencynsmanagedobject

解决方案


使用@NSManaged对线程安全没有影响。它帮助 Core Data 管理属性,但不会为线程或其他任何东西保持属性安全。

如果函数与 Core Data 相关,按原样使用perform会很好,因为Core Data 管理线程安全的方式也是如此。进入内部或安全的财产;在这些功能之外访问它通常是不安全的。doSomethingperformperformAndWaitperformperformAndWait

上述唯一的例外是,如果您的托管对象上下文使用主队列并发(例如,如果您正在使用NSPersistentContainer并且上下文是viewContext属性)并且您确定您的代码正在主队列上运行,那么您不需要使用performor performAndWait。在这种情况下使用它们还不错,但也没有必要。


推荐阅读