2017-08-31 143 views
0

對不起,我有一個關於內存管理的問題。
我創建一個「用戶」對象。
而當我結束使用時,我想讓它無租約記憶。
我嘗試了但我失敗了。
我怎麼了?
如何在swift中刪除類對象?

var user:User? = User(userId) 
user?.fromJson(data["user"]) 
self.users[userId] = user 
user?.updateDb() 
user = nil 
+0

什麼意思是「我失敗了」?你會得到一個編譯器錯誤或什麼?順便說一句。你不需要關心swift中的內存管理,這種語言有一個垃圾回收器,如果一個對象不能再被你的代碼訪問,它將釋放內存。請檢查:https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/AutomaticReferenceCounting.html – JohnnyAW

+0

@JohnnyAW垃圾收集和ARC是兩個完全分離的概念。 –

+2

你已經把'User'放在'self.users'數組中;所以有一個參考,它將不會被釋放,直到該參考消失。 – Paulw11

回答

0

在大多數情況下,你不需要擔心deinitializing對象多。 Swift就像它的前身Objective-C一樣使用自動引用計數(ARC)來跟蹤哪些對象仍在使用中,哪些對象需要被刪除。簡而言之,如果沒有對象的強引用,它將自動被釋放。

就你而言,你定義了user局部變量。如果您不在別的地方存儲對該變量的引用,它將在您離開聲明的範圍後立即解除分配。

+0

我只是好奇,這是一個垃圾收集「完全獨立的概念」嗎? – JohnnyAW

+0

@JohnnyAW [ARC vs GC](https://docs.elementscompiler.com/Concepts/ARCvsGC/) – ColGraff

+0

@ColGraff thx用於鏈接,但是這實際上表明,這是對同一個「概念」的2種不同實現的內存管理 – JohnnyAW

1

如果 「用戶」 是參考類型

在創建對象referenceCount遞增1

時通過 「用戶id」 在字典設定用戶referenceCount遞增1

和referenceCount == 2

後用戶=零,則刪除1參考

referenceCount == 1

並留1強參考,物體不被刪除

+0

如何檢查引用計數 –

+0

核心基礎具有C函數返回值refCount 「CFGetRetainCount(_ cf:CFTypeRef!) - > CFIndex」 CFindex是int上的typealias –