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