Самый простой способ сделать это - объявить свойство как readonly
в общедоступном интерфейсе для MyClass
(т.е. файл .h):
@property (readonly) NSInteger prop;
Затем в файле .m для этого класса объявите класс расширение (категория с пустым именем). В расширениях классов вы можете переопределить @property, чтобы изменить возможность его записи на чтение-запись:
@interface MyClass ()
@property (readwrite) NSInteger prop;
@end
@implementation MyClass
@synthesize prop;
...
@end
Конечно, Objective-C не применяет ограничения доступа, поэтому ничто не мешает некоторому мошенническому коду вызывать -[MyClass setProp:]
. Однако компилятор пометит это как предупреждение, что так же хорошо, как вы можете получить в Objective-C. К сожалению, не существует стандартного способа документировать это «защищенное» свойство записи для подклассов; вам придется согласиться на соглашение для вашей команды и или поместить его в общедоступную документацию для класса, если оно находится в рамках, который вы собираетесь выпустить.