Vấn đề:
Chúng ta nên sử dụng weak hoặc unowned ở đây? Giải thích.
UIView.animate(withDuration: 0.3) {
self.view.alpha = 0.0
}
Giải pháp:
Bạn cần sử dụng [weak self] hoặc [unowned self] nếu closure của bạn có thể gây ra Strong Reference Cycle.
Điều này có thể xảy ra nếu bạn gán closure cho một thuộc tính của self và bạn tham chiếu đến self hoặc một thuộc tính của self bên trong chính closure đó. Closure là kiểu tham chiếu, do đó về cơ bản các quy tắc tương tự áp dụng cho các strong reference như thể bạn sử dụng các normal class. Ví dụ:
class C {
var f: (Void -> Void)!
deinit {
print("deinit for C")
}
}
do {
let c = C()
c.f = {
print(c) // strong reference cycle created
}
}
Đối với ví dụ của bạn, không cần [weak self] hoặc [unowned self], vì bạn không gán closure cho một biến bên trong lớp mà self tham chiếu đến, vì vậy sẽ không có strong reference cycle.