在下面的代码中,为什么在给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.
}
}
答案 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