我是Kotlin的新手,我无法理解finalize()方法的工作方式。我知道Swift,有一种叫做deinit的方法,当一个对象被销毁时会被调用。如何检查对象在Kotlin中是否已被破坏。
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
printTC()
}
fun printTC(){
var tc:TestClass? = TestClass()
println(tc?.i)
tc = null
}
}
class TestClass{
var i = 0
init {
test()
}
protected fun finalize(){
println("TestClass freed")
}
fun test(){
println("test")
}
}
答案 0 :(得分:3)
当不再有对象引用时,不能保证垃圾回收立即运行,这可能就是为什么您还没有看到finalize
方法运行的原因。您可以尝试通过调用System.gc()
来强制其运行,但是最终由GC实现选择何时运行终结器,因此,您一般不应该依赖它们。
Android垃圾回收可能由于多种原因而有所不同,但是至少在一个简单的JVM命令行应用程序中,它可以按您期望的那样工作:
fun main() {
var tc: TestClass? = TestClass() // test
tc = null
System.gc() // TestClass freed
}