Najprostszym sposobem osiągnięcia tego celu jest zadeklarować właściwość jako readonly
w interfejsie publicznym dla MyClass
(czyli pliku .h):
@property (readonly) NSInteger prop;
Następnie w pliku .m dla tej klasy, zadeklarować klasa extension (kategoria z pustą nazwą). W rozszerzeniach klasowych, można redeclare @property zmienić swoje writeability do ReadWrite:
@interface MyClass()
@property (readwrite) NSInteger prop;
@end
@implementation MyClass
@synthesize prop;
...
@end
Oczywiście, Objective-C nie narzuca ograniczeń dostępu, więc nic nie zatrzymując się jakieś fałszywe kod z wywołaniem -[MyClass setProp:]
. Kompilator zaznaczy to jako ostrzeżenie, które jest tak dobre, jak można uzyskać w Objective-C. Niestety, nie ma standardowego sposobu udokumentowania tej "chronionej" właściwości zapisu dla podklas; będziesz musiał załatwić konwencję dla swojego zespołu i/lub umieścić ją w publicznej dokumentacji dla klasy, jeśli jest w ramach, który zamierzasz wydać.
W rzeczywistości chroniona ma specjalne znaczenie, co oznacza, że klasy pochodne będą miały dostęp. –
Zabezpieczone lub prywatne będą działać dla mnie. :-) –