美文网首页
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