2012-10-14 27 views
21

Khi bạn đọc here trong hầu hết các trường hợp, IBOutlet sẽ yếu.IBOutlet cho NSTextView trong dự án ARC

Bây giờ bạn có thể đọc trong development library không phải tất cả các lớp đều hỗ trợ các tham chiếu yếu. (ví dụ: NSTextView). Điều này có nghĩa bạn phải sử dụng assign:

@property (assign) IBOutlet NSTextView *textView; 

Nếu bạn sử dụng một tài liệu tham khảo yếu, bạn sẽ nhận được lỗi sau: "Tổng hợp các thuộc tính yếu không có là không được phép vì nó đòi hỏi sự tổng hợp của một Ivar của đối tượng __weak "

Tài liệu nào bị bỏ lỡ là bây giờ bạn phải đặt thuộc tính lại thành 0 sau khi sử dụng, ví dụ: bởi một phương pháp dealloc:

- (void)dealloc 
{ 
    self.textView = nil; 
} 

Theo như tôi hiểu các lớp học được đánh dấu bằng NS_AUTOMATED_REFCOUNT_WEAK_UNAVAILABLE không hỗ trợ tài liệu tham khảo yếu nhưng lý do là gì?

+0

Theo bài đăng được liên kết, 'IBOutlets' sẽ được ** mạnh ** theo mặc định! – Jay

Trả lời

13

Tôi nghĩ rằng tôi đã tìm thấy lý do tại sao một số lớp không hỗ trợ một tham chiếu yếu:

Như bạn có thể đọc here:

Lý do: về mặt lịch sử, nó đã được có thể cho một lớp học để cung cấp riêng của mình Tuy nhiên, các tham chiếu yếu tới một đối tượng yêu cầu sự phối hợp với việc thực thi tính tham chiếu của lớp vì trong số những thứ khác, tải trọng yếu và các cửa hàng phải là nguyên tử đối với bản phát hành cuối cùng. Do đó, việc triển khai tính tham chiếu tùy chỉnh hiện tại thường sẽ không hỗ trợ các tham chiếu yếu mà không cần nỗ lực bổ sung. Điều này là không thể tránh khỏi mà không phá vỡ khả năng tương thích nhị phân.

Các vấn đề liên quan