美文网首页
assign,retain,copy的setter和getter

assign,retain,copy的setter和getter

作者: 巴赫海兹 | 来源:发表于2019-04-03 18:35 被阅读0次

OC中,synthesize的含义就是使编译器自动生成对应的setter和getter方法,dynamic就是需要手动生成对应的setter和getter方法,下面的代码展示了当属性的语义特性声明为assign,retain和copy时,对应的setter和getter方法内部实现。

  1. 语义特性声明为assign
- (void)setAge:(int)age{
    _age = age;
}
- (int)age{
    return _age;
}

注意!

  • 属性的setter方法和getter方法是不能同时进行重写的,这是因为,一旦你同时重写了这两个方法,那么系统就不会帮你生成这个成员变量了,所以会报错,如果真的就想非要重写这个属性的setter和getter方法的话,就要手动生成成员变量,然后就可以重写了。或者是用@synthesize,想要详细了解@synthesize的可以戳这里
    https://www.jianshu.com/p/6d80cacab384

我们可以这样写

@synthesize age = myAge;

- (void)setAge:(NSString *)age {
    myAge = age;
}

- (NSString *)age {
    return myAge;
}
  1. 当语义特性声明为retain时
- (void)setName:(Test *)name{
    if (_name != name) {
        [_name release];
        [_name retain];
        _name = name;
    }
}
- (Test *)name{
    return _name;
}
  1. 当语义特性声明为copy时
- (void)setSex:(Test *)sex{
    if (_sex != sex) {
        [_sex release];
        [_sex copy];
        _sex = sex;
    }
}
- (NSString *)sex{
    return _sex;
}

注意!

iOS中的 NSString NSArray 这种iOS自身的对象貌似都做了一些优化,打印其retainCount的数值都是-1这种情况。
但是我们自己创建一个类
Test.h
用它来创建的对象是完全和我们之前理解的retainCount预期值是相同的。

相关文章

网友评论

      本文标题:assign,retain,copy的setter和getter

      本文链接:https://www.haomeiwen.com/subject/fmozbqtx.html