添加子视图时发生内存泄漏

时间:2018-09-05 00:59:09

标签: ios memory-leaks

添加子视图时,视图控制器似乎泄漏。

以下为什么打印“什么”

import UIKit

final class ViewController: UIViewController {

    private lazy var mySwitch: UISwitch = {
        let mySwitch = UISwitch()
        mySwitch.tintColor = .blue
        return mySwitch
    }()

    func setup() {
        view.addSubview(mySwitch)
    }

    @objc func switchChangedState() {

    }

    deinit {
        print("what")
    }
}

var controller: ViewController? = ViewController()
controller = nil

但以下内容不

var controller: ViewController? = ViewController()
controller?.setup()
controller = nil

修改:添加GIF

enter image description here

Xcode版本9.4.1(9F2000)

2 个答案:

答案 0 :(得分:1)

您的代码是好的。 controller?.setup()不会引起泄漏。请确保测试案例2中的代码确实被调用。 (不要求不打印任何内容)

答案 1 :(得分:0)

您的代码没有错。这里没有保留周期。

问题似乎与操场有关。可能是错误,或者是由于某些原因操场可能保留了您的视图控制器。

如果您在实际的Xcode项目(在iOS模拟器或设备中)中执行代码,则在两种情况下都会执行初始化程序:

deinit executes in both cases