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
Gợi ý câu hỏi phỏng vấn
Chưa có bình luận nào