我试图创建一个readonly属性.我想用类中的值初始化来创建这个类的实例,例如
@property (retain,readonly) NSString *firstName;
我试着像这样初始化它:
-(id)initWithName:(NSString *)n{
self.firstName = n;
}
一旦我这样做,编译器报告了一个错误,即无法分配readonly属性.那我该怎么做呢?
Ole*_*ann 41
直接分配给实例变量(不要忘记添加retain或者copy如果需要)或者在私有类扩展中重新声明属性.像这样:
在你的.h文件中:
@property (readonly, copy) NSString *firstName;
Run Code Online (Sandbox Code Playgroud)
在.m文件中:
@interface MyClass ()
// Redeclare property as readwrite
@property (readwrite, copy) NSString *firstName;
@end
@implementation MyClass
@synthesize firstName;
...
Run Code Online (Sandbox Code Playgroud)
现在,您可以在实现中使用合成的setter,但类接口仍然将该属性显示为readonly.请注意,导入.h文件的其他类仍然可以调用,-[MyClass setFirstName:]但是它们不会知道它存在并且会收到编译器警告.
Ren*_*ers 14
不要使用合成的setter:
firstName = [n retain]; //Or copy
Run Code Online (Sandbox Code Playgroud)
通常建议在任何init和dealloc方法中绕过setter.
您可以使用以下方法直接访问属性:
_firstName = n;
self.firstName = n隐含的setter方法将不会被合成,因为您readonly在中指定了@property (retain,readonly) NSString *firstName;,因此会导致编译器错误。
| 归档时间: |
|
| 查看次数: |
17845 次 |
| 最近记录: |