存储值的名称?我怎么看呢?

时间:2016-05-20 11:55:00

标签: swift class garbage-collection

我正在学习快速编程语言,目前主题为 garbige collection

class Person{
    var firstName: String
    var lastName: String

    init(firstName: String, lastName: String){
        self.firstName = firstName
        self.lastName = lastName
    }

    deinit{
        print("\(firstName) \(lastName) is being removed from momory!")
    }
}


var john = Person(firstName: "Johhny", lastName: "Appleseed")

john = Person(firstName: "Frank", lastName: "koin")

john = Person(firstName: "kayano", lastName: "izuku")

对象john,AKA" Johhny"的实际值"苹果籽" "弗兰克" ...,保存在堆空间中,在Swift从内存中删除对象之前,函数deinit可以告诉我将删除哪个对象。

问题1 :对象的名称如何,例如 john ,它在哪里存储,堆叠或堆?我能把它摧毁吗?

问题2 :有人可以向我推荐一些计算机科学基础书籍,这样我就可以拥有像这样的知识,或者像堆栈一样的知识,编译器的工作方式等等。

评论:我认为john = nil可以完成这项艰巨的工作,如果我错了,请纠正我

1 个答案:

答案 0 :(得分:0)

名称john仅在编译期间需要,并且根本不在运行时。但是,如果你的意思是引用该对象的john变量,那么它在概念上就是在堆栈上(仅在此范围内可用),但是编译器可以通过多种方式对其进行优化,因此它可能只是在寄存器中或被删除(因为你在分配后从不使用它)

另外,为了消除你的误解 - 这不是垃圾收集。 Swift实现自动引用计数(ARC) - 它具有自动释放未使用对象的内存的效果,但是不同。你遇到的主要问题是ARC无法处理循环引用(即两个引用彼此的对象),而垃圾收集器可以。