對不起,我有一個關於內存管理的問題。
我創建一個「用戶」對象。
而當我結束使用時,我想讓它無租約記憶。
我嘗試了但我失敗了。
我怎麼了?
如何在swift中刪除類對象?
var user:User? = User(userId)
user?.fromJson(data["user"])
self.users[userId] = user
user?.updateDb()
user = nil
對不起,我有一個關於內存管理的問題。
我創建一個「用戶」對象。
而當我結束使用時,我想讓它無租約記憶。
我嘗試了但我失敗了。
我怎麼了?
如何在swift中刪除類對象?
var user:User? = User(userId)
user?.fromJson(data["user"])
self.users[userId] = user
user?.updateDb()
user = nil
在大多數情況下,你不需要擔心deinitializing對象多。 Swift就像它的前身Objective-C一樣使用自動引用計數(ARC)來跟蹤哪些對象仍在使用中,哪些對象需要被刪除。簡而言之,如果沒有對象的強引用,它將自動被釋放。
就你而言,你定義了user
局部變量。如果您不在別的地方存儲對該變量的引用,它將在您離開聲明的範圍後立即解除分配。
如果 「用戶」 是參考類型
在創建對象referenceCount遞增1
時通過 「用戶id」 在字典設定用戶referenceCount遞增1
和referenceCount == 2
後用戶=零,則刪除1參考
referenceCount == 1
並留1強參考,物體不被刪除
如何檢查引用計數 –
核心基礎具有C函數返回值refCount 「CFGetRetainCount(_ cf:CFTypeRef!) - > CFIndex」 CFindex是int上的typealias –
什麼意思是「我失敗了」?你會得到一個編譯器錯誤或什麼?順便說一句。你不需要關心swift中的內存管理,這種語言有一個垃圾回收器,如果一個對象不能再被你的代碼訪問,它將釋放內存。請檢查:https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/AutomaticReferenceCounting.html – JohnnyAW
@JohnnyAW垃圾收集和ARC是兩個完全分離的概念。 –
你已經把'User'放在'self.users'數組中;所以有一個參考,它將不會被釋放,直到該參考消失。 – Paulw11