快速4弱变量

时间:2018-08-17 09:42:08

标签: swift weak-references

在下面的代码中,为什么在给car1变量分配nil时,car2不为nil? 有人可以解释吗。之所以问这个问题,是因为我知道当一个对象的所有强引用都被赋值为nil时,所有其他弱引用都被自动赋为nil了吗?

非常感谢您。

class ViewController: UIViewController {
    var car1 : Car? = Car()
    weak var  car2 : Car?

    override func viewDidLoad() {
        super.viewDidLoad()
        car2 = car1
        car1 = nil
        print("gfehtre")
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

2 个答案:

答案 0 :(得分:0)

不确定您的问题是什么:car2仅在下一行car2 = car1上执行car1 = nil car2也变为nil时才为nil,

通过以下方式自己进行测试:

override func viewDidLoad() {
    super.viewDidLoad()

    if let _ = car2 {
        print("first")
    }

    car2 = car1

    if let _ = car2 {
        print("second")
    }

    car1 = nil

    if let _ = car2 {
        print("third")
    }
}

您将在控制台中看到在其他所有情况下,second均为空时仅打印car2

答案 1 :(得分:0)

您如何在操场上对其进行测试?实际称为viewDidLoad()吗?我在操场上的代码显示car2确实变成了nil

class Car {
    deinit {
        print("deinit")
    }
}

class ViewController: UIViewController {
    var car1 : Car? = Car()
    weak var  car2 : Car?

    override func viewDidLoad() {
        super.viewDidLoad()
        car2 = car1
        car1 = nil
        print("Is car2 nil?: \(car2 == nil)")
    }
}

let vc = ViewController()
vc.loadViewIfNeeded()

打印:

\\ deinit
\\ Is car2 nil?: true