Cách dễ nhất để thực hiện điều này là để kê khai tài sản như readonly
trong giao diện công cộng cho MyClass
(tức là file .h):
@property (readonly) NSInteger prop;
Sau đó, trong file .m cho lớp đó, khai báo một lớp extension (danh mục có tên trống). Trong phần mở rộng lớp, bạn có thể redeclare một @property thay đổi writeability của nó để ReadWrite:
@interface MyClass()
@property (readwrite) NSInteger prop;
@end
@implementation MyClass
@synthesize prop;
...
@end
Tất nhiên, Objective-C không thực thi hạn chế truy cập, vì vậy không có gì ngăn chặn một số mã giả mạo từ gọi -[MyClass setProp:]
là. Trình biên dịch sẽ gắn cờ đây là một cảnh báo, tuy nhiên, đó là tốt như bạn có thể nhận được trong Objective-C. Thật không may, không có cách nào tiêu chuẩn để ghi lại thuộc tính có thể ghi "được bảo vệ" này thành các lớp con; bạn sẽ phải giải quyết một quy ước cho nhóm của mình và đưa nó vào tài liệu công khai cho lớp nếu nó nằm trong một khung công tác mà bạn sắp phát hành.
Nguồn
2009-08-27 04:24:45
Thực tế được bảo vệ có ý nghĩa đặc biệt, điều đó cũng có nghĩa là các lớp dẫn xuất sẽ có quyền truy cập. –
Được bảo vệ hoặc riêng tư sẽ hoạt động đối với tôi. :-) –