assign,retain,copy的setter和getter

2019-04-03  本文已影响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;
}

注意!

我们可以这样写

@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预期值是相同的。

上一篇下一篇

猜你喜欢

热点阅读