Либо присвойте переменную экземпляра напрямую (не забудьте добавить retain
или copy
, если вам это нужно), либо повторно объявите свойство в расширении частного класса. Как это:
В вашем .h файле:
@property (readonly, copy) NSString *firstName;
В вашем .m файле:
@interface MyClass ()
// Redeclare property as readwrite
@property (readwrite, copy) NSString *firstName;
@end
@implementation MyClass
@synthesize firstName;
...
Теперь вы можете использовать синтезированный установщик в вашей реализации, но интерфейс класса по-прежнему показывает свойство только для чтения. Обратите внимание, что другие классы, которые импортируют ваш файл .h, могут по-прежнему вызывать -[MyClass setFirstName:]
, но они не будут знать, что он существует, и получат предупреждение компилятора.