Ios 闭包如何删除视图控制器的内存?
我想了解一下闭包中的内存管理 例如,我们有一个视图控制器,它要完成一个闭包。当我检查视图控制器的引用计数时,它显示引用计数1 何时清除/删除已关闭视图控制器的内存 这是我的密码Ios 闭包如何删除视图控制器的内存?,ios,swift,Ios,Swift,我想了解一下闭包中的内存管理 例如,我们有一个视图控制器,它要完成一个闭包。当我检查视图控制器的引用计数时,它显示引用计数1 何时清除/删除已关闭视图控制器的内存 这是我的密码 class ViewController: UIViewController { @IBOutlet weak var buttonToHide: UIButton! override func viewDidLoad() { super.viewDidLoad() /
class ViewController: UIViewController {
@IBOutlet weak var buttonToHide: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
@IBAction func showSecondViewController() {
guard let second = self.storyboard?.instantiateViewController(withIdentifier: "second") else { return }
present(second, animated: true, completion: nil)
}
}
class SecondViewControler: UIViewController {
@IBOutlet weak var lbl: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
}
deinit {
print("\(self) is being deinitialized") // still self object is there
print(_getRetainCount(self)) // returning 1
}
@IBAction func dismissController() {
DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(6)) {
self.lbl.text = "HHi"
print("self reference : ",self.lbl.description)
}
self.dismiss(animated: true, completion: nil)
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidAppear(animated)
print("viewDidDisappear", self.lbl.description)
}
}
根据实例,在调用其deinitializer之后的一段时间内,不会立即解除分配它的引用计数1
Deinitializer是在实例之前自动调用的
解除分配发生。您不允许呼叫取消初始化器
你自己超类去初始化器由其子类继承,
并且超类deinitializer在
子类去初始化器实现。超类去初始化器是
始终调用,即使子类不提供自己的
去初始化器
因为一个实例在其deinitializer之后才被释放
调用时,反初始化器可以访问实例的所有属性
它被调用,并且可以基于这些属性修改其行为
(例如查找需要关闭的文件名)
根据实例,在调用其deinitializer之后的一段时间内,不会立即解除分配它的引用计数1
Deinitializer是在实例之前自动调用的
解除分配发生。您不允许呼叫取消初始化器
你自己超类去初始化器由其子类继承,
并且超类deinitializer在
子类去初始化器实现。超类去初始化器是
始终调用,即使子类不提供自己的
去初始化器
因为一个实例在其deinitializer之后才被释放
调用时,反初始化器可以访问实例的所有属性
它被调用,并且可以基于这些属性修改其行为
(例如查找需要关闭的文件名)
请参考以下和标题“关于闭包的强参考周期”,您将非常了解它的工作原理。我认为引用计数将是1,除非
deinit
方法完成。因此,在完全关闭后检查引用计数。请参考以下和标题“关闭的强引用周期”,您将对其工作原理有很好的了解。我认为引用计数将是1,除非deinit
方法完成。因此,请在完全解除后检查引用计数。