您好,欢迎来到二三娱乐。
搜索
您的当前位置:首页深度解析copy与strong的区别

深度解析copy与strong的区别

来源:二三娱乐

strong此特质标明该属性定义了一种拥有关系。为这种属性设定新值时,设置方法会先保留新值再释放旧值,然后再讲新值设置上去。

copy 此特质所表达的所属关系与strong类似。然而设置方法并不保留新值而是将其拷贝,当属性类型为NSString*时,经常用此特性来保护其封装性,因为传递给设置方法的新值有可能指向一个NSMutableString类的实例这个类是NSString的子类,表示一种可以修改其值得字符串,此时若是不拷贝字符串,那么设置完属性之后,字符串的值就可能会在对象不知情的情况下遭人更改。所以这时就要拷贝一份不可变的字符串,确保对象中的字符串值不会无意间变动。只要实现属性所用的对象是可变的,就应该在设执行属性是拷贝一份。

现有A、B两个类,A类设置一可变字符串a , B类声明两个strong copy两个不同变量b1、b2;

B * b =[[B alloc]init];

NSMutableString * a=[@"first" mutableCopy];

B.b1=a;

B.b2=a;

分析下面两种操作对B中b1、b2影响

1️⃣[a appendString:@"+"];     /    2️⃣a=[@"second" mutableCopy];

NSLog(@"%@",B.b1);

NSLog(@"%@",B.b2);

第一种打印结果分别为first first+

第二种打印结果分别为first first

针对第一种分析:strong指向的是相同对象地址,仅仅是指针引用,增加了引用计数,这样源头改变的时候,它也会跟着改变; 而copy声明的变量,指向的是不同对象地址、它不会跟着源头改变,实际上是深拷贝。

而第二种,重新赋值相当于对于变量a又重新开辟了一段地址,而b1中记录的依旧是初始值a的地址,所以其值不发生改变。

Copyright © 2019- yule263.com 版权所有 湘ICP备2023023988号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务