今天碰到一个基础问题,需要自定义set方法,本来挺顺利的,定义一个属性
.h文件
@property (nonatomic, strong) NSString *name
.m文件
- (void)setName:(NSString*)name
{
_name = name;
}
上面这么写大家应该都能理解,即自定义set方法的标准写法。后来属性的名称改了一下,忘记了改set方法,导致设置属性时走不到自定义方法中,搞了半天,终于找到问题,我想说的不是这个,这个只是起因,要说的是解决问题过程中碰到的一个问题:同时使用自定义 get/set 方法的注意点。
或许你认为,这还不简单,如下:
.h文件
@property (nonatomic, strong) NSString *name
.m文件
- (void)setName:(NSString*)name
{
_name = name;
}
- (NSString*)name
{
return _name
}
但实际上,xcode7.2给出了如下错误:
/Users/zoubon/testproject/testpro/testpro/testProperty.m:21:5: Use of undeclared identifier '_name'; did you mean 'name'?
找不到标识符_name,奇怪,_name不就是属性name的别名吗?
确实是,在自定义单独的一个get或set方法时,上面的写法没有问题,但两个同时存在时,就错了,原因暂不深究,就说解决方法吧,一个久远的关键字:@synthesize
@synthesize first = _first
很久以前@synthesize就不用了,编译器自动生成属性的get/set方法,想不到同时自定义时,派上了用场,先写到这里吧,或许还有一些原因或方法我没有想到,后面再补充吧