Trong WWDC 2014 phiên 403 Trung cấp Swift và bảng điểm , có slide sau
Người nói đã nói trong trường hợp đó, nếu chúng ta không sử dụng [unowned self]
ở đó, nó sẽ bị rò rỉ bộ nhớ. Có nghĩa là chúng ta nên luôn luôn sử dụng [unowned self]
bên trong đóng cửa?
Trên dòng 64 của ViewControll.swift của ứng dụng Swift Weather , tôi không sử dụng [unowned self]
. Nhưng tôi cập nhật giao diện người dùng bằng cách sử dụng một số @IBOutlet
s self.temperature
và self.loadingIndicator
. Nó có thể ổn vì tất cả những @IBOutlet
gì tôi xác định là weak
. Nhưng để an toàn, chúng ta có nên luôn luôn sử dụng [unowned self]
?
class TempNotifier {
var onChange: (Int) -> Void = {_ in }
var currentTemp = 72
init() {
onChange = { [unowned self] temp in
self.currentTemp = temp
}
}
}
onChange
nên là một [weak self]
đóng cửa, vì đó là một thuộc tính công khai (bên trong, nhưng vẫn), do đó, một đối tượng khác có thể lấy và lưu trữ bao đóng, giữ đối tượng TempNotifier xung quanh (vô thời hạn nếu đối tượng sử dụng đã không buông bỏ việc onChange
đóng cửa cho đến khi nó thấy nó TempNotifier
biến mất, thông qua tham chiếu yếu của chính nó đối với TempNotifier
) . Nếu var onChange …
được private var onChange …
thì [unowned self]
sẽ đúng. Tôi không chắc chắn 100% về điều này mặc dù; Ai đó làm ơn sửa cho tôi nếu tôi sai.
[]
? Tôi không thể tìm thấy lời giải thích trong các tài liệu của Apple.
{}
là bao đóng rỗng (ví dụ của bao đóng) là mặc định (không làm gì cả), (Int) -> Void
là định nghĩa đóng.