我是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")
}
}
当没有更多对象的引用时,不保证垃圾收集立即运行,这可能就是为什么你还没有看到finalize
方法运行的原因。您可以尝试通过调用System.gc()
来强制它运行,但最终由GC实现来选择何时运行终结器,因此您通常不应该依赖它们。
由于许多原因,Android垃圾收集可能会有不同的行为,但至少在一个简单的JVM命令行应用程序中,这可以按照您的预期运行:
fun main() {
var tc: TestClass? = TestClass() // test
tc = null
System.gc() // TestClass freed
}