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
实例消失,因为它的父母都释放了它?
答案 0 :(得分:4)
是的,用户实例消失了。 Swift使用automatic reference counting来管理内存。在您的情况下,当您将用户插入资源字典时,dict将保存对该用户的引用。当您稍后将用户添加到用户列表中时,它还包含对用户的引用。它有两个对同一实例的引用,因此,当您从这些数据结构中删除用户时,您没有引用该实例,这意味着将删除该用户实例。