即從其他執行緒訪問NSManagedObject的managedObjectContext屬性?例如:
class StoredObject。NSManagedObject {
@NSManaged public var interestProperty: String
}
-------背景的某個地方 -------
let context = storedObject.managedObjectContext //is it safe?
context.perform { [storageObject] in
//對interestProperty做一些處理。
}
---------------------------------------
uj5u.com熱心網友回復:
NSManagedObjectContext不是執行緒安全的。即使你抓住了這樣一個物件的實體,在不同的執行緒上使用它可能會導致未定義的行為。
這一點在 Apple 檔案中有所規定(重點是我):
Core Data 被設計為在多執行緒環境中作業。然而,并非Core Data框架下的每個物件都是執行緒安全的。要在多執行緒環境中使用 Core Data,請確保:Core Data 被設計用于在多執行緒環境中作業。
被管理的物件背景關系在初始化時被系結到它們所關聯的執行緒(佇列)。
管理物件背景關系在初始化時被系結到它們所關聯的執行緒(佇列)。
從背景關系中檢索的受管物件被系結到背景關系所系結的同一佇列中。
因此,盡管讀取managedObjectContext屬性可能是執行緒安全的,但由于該屬性是只讀的,你將無法在不冒競賽條件風險的情況下使用它。而且你還需要考慮到托管物件的生命周期,因為除非適當保留,否則你最終可能會向一個被洗掉的托管物件詢問其背景關系。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/325325.html
標籤:
