Trong giao diện (.h) tập tin tôi, tôi cóCác câu hỏi về một @property readonly trong ARC
@property(readonly) NSString *foo;
và trong việc thực hiện (.m) tập tin tôi, tôi có
@synthesize foo;
Với ARC bật, trình biên dịch cho tôi lỗi này: Vấn đề đếm tham chiếu tự động: ARC cấm tổng hợp thuộc tính của đối tượng Objective-C với thuộc tính lưu trữ hoặc quyền sở hữu không xác định.
Lỗi sẽ biến mất nếu tôi thêm strong
, weak
hoặc copy
vào thuộc tính. Tại sao điều này? Tại sao sẽ có bất kỳ sự khác biệt nào giữa những thứ này cho thuộc tính chỉ đọc, những khác biệt đó là gì và tại sao lập trình viên phải lo lắng về chúng? Tại sao trình biên dịch không thể suy ra một thiết lập mặc định cho thuộc tính chỉ đọc?
Một câu hỏi khác khi tôi ở đó: strong
, weak
hoặc copy
là những điều duy nhất có ý nghĩa trong ARC, phải không? Tôi không nên sử dụng retain
và assign
nữa, phải không?
Ah, giờ đây nó bắt đầu có ý nghĩa gì đó. Nhưng nếu tôi chỉ định 'copy' (cho thuộc tính' readwrite'), thì ivar được tạo ra có phải là '__strong' hoặc' __weak' không? – Enchilada
(Trên thực tế, 'copy' cũng biên dịch cho thuộc tính' readonly', có vẻ hơi lạ đối với tôi.) – Enchilada
Thuộc tính 'copy' sẽ tổng hợp các' iv_strong' ivars.Lý do chính bạn có thể khai báo 'copy' trên thuộc tính' readonly' là bạn có thể redeclare nó trong một phần mở rộng của lớp là 'readwrite'; để làm như vậy, mọi thứ khác phải phù hợp. –