OC 自定义 get/set 方法注意点

原创
2015/12/29 15:38
阅读数 428

    今天碰到一个基础问题,需要自定义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方法,想不到同时自定义时,派上了用场,先写到这里吧,或许还有一些原因或方法我没有想到,后面再补充吧


展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部