objective-c - iOS 中setter和getter方法为什么不可以同时写
迷茫
迷茫 2017-04-17 14:43:19
[iOS讨论组]

单独写setter方法或者getter方法不会报错。

但是同时写,会报错,说不认识成员变量。

例如属性 NSString * name;

-(void)setName:(NSString *)name
{
_name = name;
}

-(NSString *)name
{
return _name;
}

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(5)
黄舟

objective-c下如果某属性的getter,setter都要重写的话
需要加上@synthesize propertyName = _propertyName;
至于为什么网上有很多详细的文章分析,可以去看看

伊谢尔伦

如果同时重写了getter和setter方法,那么系统就不会帮你自动生成这个成员变量,所以当然报错说不认识这个成员变量。先手动生成成员变量,然后再同时重写了getter和setter方法。

BOOL _carOwner;

#pragma mark - getters and setters
-(void)setCarOwner:(BOOL)carOwner
{   
    _carOwner = carOwner;

    // 自定义操作
    [[NSUserDefaults standardUserDefaults] setBool:_carOwner forKey:@"KeyIsCarOwner"];
    [[NSUserDefaults standardUserDefaults] synchronize];
}
- (BOOL)carOwner {

    // 自定义操作
    id result = [[NSUserDefaults standardUserDefaults] valueForKey:@"KeyIsCarOwner"];
    if (result) {
        return [[[NSUserDefaults standardUserDefaults] valueForKey:@"KeyIsCarOwner"] boolValue];

    }
    return _carOwner;
}

怪我咯

因为你写错了啊。(:з」∠) 写成self-> name = name ;

PHPz

刚去试了下,确实像你说的。不知道什么原因。加上@synthesize name = _name;语法之后就不报错了。

ringa_lee

用self.name就行了 反正效果一样

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号