objective-c - iOS 中setter和getter方法为什么不可以同时写
迷茫
迷茫 2017-04-17 14:43:19
0
5
233

单独写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 ;

        PHPzhong

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

          左手右手慢动作

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

            最新下载
            更多>
            网站特效
            网站源码
            网站素材
            前端模板
            关于我们 免责声明 Sitemap
            PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!