Bạn có biết cách làm cho một thuộc tính chỉ đọc cho các cuộc gọi bên ngoài và ghi đè cho các cuộc gọi bên trong không?Mục tiêu-C: (thuộc tính cá nhân/công cộng) làm cho một thuộc tính chỉ đọc cho các cuộc gọi ngoài lớp và ghi đè cho các cuộc gọi tự gọi
Tôi đã đọc lần trước somthing mà có vẻ như
Trong .h
@property(nonatomic, readonly) NSDate* theDate;
Trong .m
@interface TheClassName()
@property(nonatomic, retain) NSDate* theDate;
@end
nhưng điều này đặt ra một cảnh báo khi biên soạn các .m "Thuộc tính theDate thuộc tính trong lớp tiếp tục lớp TheClassName không khớp với thuộc tính lớp TheClassName".
Dù sao, có vẻ như nó hoạt động (có thể đọc nhưng không được đặt từ bên ngoài lớp học, có thể làm cả từ bên trong) nhưng tôi nên bỏ lỡ một số thứ để tránh cảnh báo. Hoặc nếu bạn biết cách tốt hơn để làm điều này ...
+1, cũng có thể muốn thả 'readwrite' là 'readwrite' mặc định và' nonatomic' cho đến khi điều đó thực sự cần thiết? – zoul
'readwrite' làm cho nó rõ ràng rằng bạn biết chính xác những gì bạn muốn. Một số người đang thực hiện câu thần chú "luôn luôn sử dụng" nonatomic "" từ iOS đến Cocoa (tôi chắc chắn làm); nó có thể là một chính sách rộng lớn của dự án. – bbum
Ngoài ra; lý do tại sao 'giữ lại' phải được đề cập ở cả hai nơi là codegen cho' @ tổng hợp' của getter của 'retain' và' assign' có thể khác nhau trong một số trường hợp nhất định. Do đó, chính sách 'giữ lại' trên chế độ xem chỉ đọc của thuộc tính * là * một phần của API/hợp đồng của lớp. – bbum