【问题标题】:How do I correctly release memory in Swift?如何在 Swift 中正确释放内存?
【发布时间】:2016-08-09 14:14:39
【问题描述】:

UserManagerViewController 是一个为我的其余视图控制器管理用户对象(创建/释放)的类(这样我就不会创建多个用户对象),我有:

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

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

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 实例简单地消失,因为它的双亲都释放了它?

【问题讨论】:

  • User 是类还是结构?

标签: swift


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2020-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-26
    • 2023-03-11
    • 1970-01-01
    • 2020-11-28
    相关资源
    最近更新 更多