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