2009-12-19 26 views

Trả lời

17

Bạn có thể bao gồm khai báo ghi đè thứ hai, riêng tư trong tiện ích mở rộng lớp học. Lược đồ quản lý bộ nhớ cho tất cả các tài liệu tham khảo cần phải phù hợp với IIRC, vì vậy bạn sẽ nhận được sự silliness như "chỉ đọc, giữ lại".

+3

Nó không hoàn toàn ngớ ngẩn; ma trận của modifier so với @synthesize là mã của getter ** có thể ** thay đổi. Đang cố gắng giải thích chính xác những công cụ sửa đổi nào sẽ có thể được thêm vào so với #warn sẽ rạn nứt với minutia và khó có thể hiểu được. Tốt hơn là chỉ cần đi với "phải giống nhau ngoại trừ readonly-> readwrite". – bbum

+0

Hình tôi nên mở rộng trên nhận xét của tôi .... – bbum

36

Hoặc, cụ thể hơn, (chỉ đọc, giữ lại) cho phép một mô hình như thế này:

foo.h:

@interface StuffHolder:NSObject 
@property(readonly, retain) MyStuff *stuff; 
@end 

Foo.m:

@interface StuffHolder() 
@property(readwrite, retain) MyStuff *stuff; 
@end 

@implementation StuffHolder 
@synthesize stuff; 
@end 

Kết quả cuối cùng là một tài sản được công khai chỉ đọc trong khi được ghi đè trong thực hiện và cho cả hai setter và getter được tổng hợp tự động bởi trình biên dịch.

Phạt cảnh cáo thể được tạo ra trong trường hợp không có (đọc-ghi, giữ lại) override trong phần mở rộng lớp - một cái gì đó giống như statement without an effect - nhưng nó sẽ gây lộn xộn hơn có lợi. Ngoài ra còn có một loạt các trường hợp cạnh khác nhau trên các kết hợp mà sẽ bảo đảm một cảnh báo, nhưng không thực sự chỉ ra một vấn đề thực tế. Quyết định đã được thực hiện để chấp nhận phần lớn các mô hình khác nhau mà không có khiếu nại vì lợi ích của sự đơn giản (vì chúng không phải là vấn đề chính xác).

+0

Nó được quảng cáo là chỉ đọc nhưng nó vẫn sẽ có thể ghi nếu trình biên dịch đã tạo ra một setter cho nó, phải không? – dreamlax

+1

Nếu ai đó viết mã để gọi setter, chắc chắn, nhưng không khai báo phương thức nào đó, họ sẽ thấy cảnh báo ... – bbum

+0

Thuộc tính chỉ đọc "công khai" (được khai báo trong tiêu đề) và thuộc tính "riêng tư" (được khai báo trong tệp nguồn) không còn được hỗ trợ (với Xcode 3.2.3 - iPhone SDK 4 và GCC 3.2) lỗi: các thuộc tính tổng hợp 'x' và 'y' cả hai yêu cầu ivar 'z' – Felix

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