Tôi hiện đang theo dõi Apple Documentation. Đây là câu hỏi của tôi:ARC (tính năng tham khảo tự động) trong hành động
class Person {
let name: String
init(name: String) {
self.name = name
println("\(name) is being initialized")
}
deinit {
println("\(name) is being deinitialized")
}
}
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
var reference1: Person?
var reference2: Person?
var reference3: Person?
reference1 = Person(name: "John Appleseed")
// prints "John Appleseed is being initialized
reference2 = reference1
reference3 = reference1
reference1 = nil
reference2 = nil
}
}
Sau reference1
bằng nil
, ARC deallocates dụ và in "John Appleseed is being deinitialized"
không nên nó được deallocates sau reference3 = nil
?
@JakubVano Để biết thêm thông tin tôi đang chạy mã này trong viewDidLoad() phương pháp. Tuy nhiên reference3 không phải là nil, trình biên dịch deallocates dụ ngay cả tham chiếu Strong tồn tại. – ridvankucuk
Ảnh chụp màn hình đó thêm lộn xộn, không rõ ràng. – nhgrif
Bạn xác định thời điểm * chính xác * mà 'deinit' xảy ra như thế nào? Tôi hy vọng nó sẽ được gọi ngay sau khi phương thức trả về (và chắc chắn không phải là một lúc sau). Nó có thể được gọi trước đó do một số loại tối ưu hóa, nhưng nó chắc chắn sẽ không treo xung quanh sau khi phương thức trả về. – nhgrif