swift 4个弱变量
swift 4 weak variable
在下面的代码中,为什么当 car1 变量被赋值为 nil 时,car2 不是 nil?
有人可以解释一下吗?我问这个问题是因为我知道当一个对象的所有强引用都被分配为 nil 时,所有其他弱引用都被分配为 nil automatically.is 它错了吗?
非常感谢。
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.
}
}
不知道你的问题是什么:只有在下一行执行car2 = car1
时,car2
才不是nil car1 = nil
car2
也变成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
为 nil
你如何在操场上测试它? 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
在下面的代码中,为什么当 car1 变量被赋值为 nil 时,car2 不是 nil? 有人可以解释一下吗?我问这个问题是因为我知道当一个对象的所有强引用都被分配为 nil 时,所有其他弱引用都被分配为 nil automatically.is 它错了吗?
非常感谢。
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.
}
}
不知道你的问题是什么:只有在下一行执行car2 = car1
时,car2
才不是nil car1 = nil
car2
也变成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
为 nil
你如何在操场上测试它? 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