我正在创建一个ViewController对象,将其推送到导航控制器.当从堆栈弹出对象时 - 它没有被释放而Deinit没有被调用.可能是什么原因?
这是推送的代码:
self.navigationController?.pushViewController(CustomViewController(), animated: true)
Run Code Online (Sandbox Code Playgroud)
这是弹出的代码:
self.navigationController?.popViewControllerAnimated(true)
Run Code Online (Sandbox Code Playgroud) 我deinit()在阅读Swift编程语言指南时遇到了一个函数,但是我仍然想知道为什么以及什么时候需要实现它,因为我们不需要管理内存.
问候.
假设我有两个类:基类和子类,如下所示:
class Base{
var name: String?
init() {
name = "The base class"
}
deinit {
println("call Deinitialization in base class")
name = nil
}
}
class Sub: Base{
var subName: String?
init() {
super.init()
subName = "The sub class"
}
deinit {
println("call Deinitialization in sub class")
subName = nil
// does it really call super.deinit() ?
// or assign name = nil ?
}
}
Run Code Online (Sandbox Code Playgroud)
当调用子类的deinitializer时,是否调用super.deinit()将name变量赋值为nil?或者我必须在子类的deinitializer中手动分配?
我有一个视图控制器(用于登录),它定义了删除观察者的deinit方法.当用户点击Register按钮时,控制器调用performSegueWithIdentifier来加载注册视图控制器.我定义了deinit方法来删除所有观察者.但是,该方法未被调用.我在某处读到它是因为viewcontroller没有被销毁而且指向它的指针被保存在某处.有谁可以解释这背后的原因?
谢谢
编辑:虽然我同意评论部分提供的链接持有相同的问题,但没有答案或明确的答案.最高的upvoted回复建议在deinit中定义一些内容而不是留空.这并没有回答我正在寻找的探索.出于这个原因,我一直保持这个问题,直到有人能够指出我的理解是不正确的.而且,我确实认为马特简明扼要地解释了它.
我有一个汽车课.让我们说一辆车去垃圾场,这辆车应该不再算在总人口中了.我有deinit功能,但我如何系统地从汽车人口中删除汽车?换句话说,我如何让deinit生效?
我有一个类变量,isJunk但不知道如何使用它来使这项工作.
class Car {
static var population: Int = 0
var isJunk: Bool = false
var color: String
var capacity: Int
var driver: Bool?
var carOn: Bool = false
init (carColor: String, carCapacity: Int) {
self.capacity = carCapacity
self.color = carColor
Car.population += 1
}
deinit {
Car.population -= 1
}
func startCar() {
self.carOn = true
}
}
Run Code Online (Sandbox Code Playgroud)