2017-08-31 144 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 –