Giải thích sự khác biệt giữa tham chiếu `...
Giải thích sự khác biệt giữa tham chiếu `...
Trong Swift, cả weak và unowned đều là các cơ chế được sử dụng để giải quyết vấn đề vòng tham chiếu mạnh (strong reference cycles) giữa các thực thể, giúp tránh tình trạng rò rỉ bộ nhớ. Tuy nhiên, chúng có một số điểm khác biệt quan trọng.
weak: Là một tham chiếu không giữ một liên kết mạnh đến đối tượng mà nó tham chiếu. Điều này có nghĩa là, ARC (Automatic Reference Counting) có thể giải phóng đối tượng mà tham chiếu weak trỏ tới mà không cần quan tâm đến tham chiếu này. Tham chiếu weak luôn là tuỳ chọn (optional) và tự động trở thành nil khi đối tượng mà nó tham chiếu đến được giải phóng. Tham chiếu weak thường được sử dụng khi có mối quan hệ "có thể không có" giữa hai đối tượng, ví dụ như mối quan hệ giữa delegate và đối tượng sử dụng nó.unowned: Giống như tham chiếu weak, unowned cũng không tạo ra một liên kết mạnh đến đối tượng mà nó tham chiếu. Tuy nhiên, khác với weak, tham chiếu unowned được giả định là luôn có giá trị; nó không phải là tuỳ chọn và sẽ không tự động trở thành nil khi đối tượng mà nó tham chiếu đến được giải phóng. Sử dụng unowned khi bạn biết chắc chắn rằng tham chiếu luôn luôn trỏ đến một đối tượng trong suốt vòng đời của nó. Tuy nhiên, nếu bạn cố gắng truy cập một tham chiếu unowned sau khi đối tượng mà nó tham chiếu đến đã bị giải phóng, ứng dụng của bạn sẽ gặp lỗi và bị crash.Ví dụ về weak:
class Person {
let name: String
init(name: String) { self.name = name }
var apartment: Apartment?
deinit { print(...
senior