Câu hỏi phỏng vấn Swift
Câu hỏi

Giải thích sự khác biệt giữa tham chiếu weakunowned trong Swift. Cho ví dụ?

Câu trả lời

Trong Swift, cả weakunowned đề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.

  • Tham chiếu 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ó.
  • Tham chiếu 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í dụ về weak:

class Person {
    let name: String
    init(name: String) { self.name = name }
    var apartment: Apartment?
    deinit { print(...
senior

senior

Gợi ý câu hỏi phỏng vấn

middle

Giải thích GCD trong iOS là gì?

expert

Chúng ta có cần sử dụng [weak self] hoặc [unowned self] trong closure này trong Swift không?

middle

Sự khác biệt giữa fileprivateprivate trong Swift là gì?

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào