对不起,我有一个关于内存管理的问题。
我创建一个“用户”对象。
而当我结束使用时,我想让它无租约记忆。
我尝试了但我失败了。
我怎么了?
如何在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