如何在Swift中正确释放内存?

时间:2016-04-18 00:49:18

标签: swift

UserManagerViewController是一个管理其余视图控制器的用户对象(创建/发布)的类(因此我不创建多个User对象),我有:

var resources = Dictionary<Int, T>()

每当我需要资源时,我都这样做:

let id = data["id"].intValue
self.resources[id] = User(data: data) //Create a User object and set it to the dictionary

我有其他的ViewControllers在它想要使用时“挂在”这个对象上:

var users = [User]()
users.insert(<The pointer to resources[id]>, atIndex: 99)

//later on...
users.removeAtIndex(99) //this should release its hold

稍后,当我需要释放最终创建的对象时,我这样做:

resources.removeValueForKey(id)

这种方法是否会正确地确保User实例消失,因为它的父母都释放了它?

1 个答案:

答案 0 :(得分:4)

是的,用户实例消失了。 Swift使用automatic reference counting来管理内存。在您的情况下,当您将用户插入资源字典时,dict将保存对该用户的引用。当您稍后将用户添加到用户列表中时,它还包含对用户的引用。它有两个对同一实例的引用,因此,当您从这些数据结构中删除用户时,您没有引用该实例,这意味着将删除该用户实例。