我在儀器中注意到,無論何時創建一個NSManagedObject
,此對象中至少有一個永遠留在內存中。我創建了一個名爲「實體」的實體的空項目。即使在初始化之後,NSManagedObject在內存中仍然存在
這個實體類:
class Books: NSManagedObject {
@NSManaged var name: String
convenience init(context: NSManagedObjectContext, name: String) {
let description = NSEntityDescription.entity(forEntityName: "Books", in: context)!
self.init(entity: description, insertInto: context)
self.name = name
}
deinit { print("\(type(of: self)): deinitialized") }
}
當我創建幾個Books
,儀器顯示出來的Books
幾個實例:
當視圖控制器deinitializes,我清理上下文使用:
deinit {
context.registeredObjects.forEach { context.refresh($0, mergeChanges: false) }
print("\(type(of: self)): deinitialized")
}
所以視圖控制器已經deinitialized後,儀器仍顯示出的Books
1個對象:
沒有什麼別的視圖控制器和日誌中顯示所有實例和控制器deinitialized。
問:
如果我創建各種實體的多個實例,那麼所有的人都會留在記憶永遠。有沒有辦法擺脫它,所以我可以保持記憶「乾淨」?
編輯:
視覺記憶調試器截圖添加
感謝您的信息,鏈接(和鏈接裏面)是非常有用的。我添加了Visual Memory Debugger的屏幕截圖。我還沒有真正理解(但)什麼意思,但是我感覺它是'NSManagedObjectContext'工作原理,它超出了我的控制範圍。你說得對,64字節是不值得的。我只是爲了好奇才發佈了這個截圖,或許它可以幫助我更好地理解Core Data。 –