Pattern dưới đây xảy ra rất nhiều trong iOS apps:Tại sao tôi lại sử dụng bản thân mình?
class MyViewController: UIViewController {
let myModel = MyModel()
override func viewDidLoad() {
super.viewDidLoad()
myModel.foo() { [***] in
// use self here
}
}
}
class MyModel {
public func foo(complete:() -> Void) {
// do something
complete()
}
}
Sự đồng thuận là sử dụng một trong hai [unowned self]
hoặc [weak self]
ở vị trí của [***]
, không có chủ khi bạn có thể đảm bảo rằng tự sẽ không được bằng không tại thời điểm kết thúc và yếu khi bạn không chắc chắn tham chiếu sẽ vẫn hợp lệ.
Điều tôi không hiểu là tại sao tôi lại có thể mạo hiểm khi sử dụng unowned, có lẽ tôi chắc chắn rằng ngay bây giờ tài liệu tham khảo sẽ không bao giờ là không, nhưng điều đó có thể thay đổi trong tương lai. Tôi cũng có thể đã bỏ qua một trường hợp cạnh, những sai lầm xảy ra. Tôi có thể dễ dàng luôn luôn sử dụng yếu, và đặt một bảo vệ ở phía trên của đóng cửa để có thể sử dụng tự mà không có một! hoặc là ?.
Việc sử dụng unowned là gì? Nó có nhanh hơn bảo vệ yếu kém không? Nó là cú pháp đường? Dường như đi ngược lại triết lý bảo vệ nhà phát triển của Swift chống lại những sai lầm phổ biến có thể gây ra sự cố.
Tôi không biết rất nhanh, nhưng trong các ngôn ngữ khác, các khái niệm như thế này '[unowned] 'rất quan trọng để giao tiếp với các ngôn ngữ khác như C thiếu tính tham chiếu. Mặc dù tại sao người ta sử dụng nó trong bối cảnh bạn hiện diện vượt ra ngoài tôi. –