美文网首页
iOS NSString 的copy与strong

iOS NSString 的copy与strong

作者: 整个夏天 | 来源:发表于2017-06-24 18:07 被阅读7次
两者区别

使用copy修饰的属性会在内存中开辟一块新的空间来存放,当原来的值发生改变后,用copy修饰的属性的值并不会跟着发生改变.

使用strong修饰的属性在赋值的时候可以理解是将属性的指针指向现有内存地址,当内存中的值发生改变之后,该属性的值也会跟着改变.

字符串例子

定义两个字符串,分别用copy和strong修饰

@property (nonatomic, strong) NSString * strStrong;
@property (nonatomic, copy) NSString * strCopy;

接着分别给两个字符串赋值并输出内容

NSMutableString * mutableStr=[[NSMutableString alloc]initWithString:@"我是小明"];
self.strCopy=mutableStr;
self.strStrong=mutableStr;

NSLog(@"strCopy:%@",self.strCopy);
NSLog(@"strStrong:%@",self.strStrong);

第一次输出结果,两个值相同为:我是小明

2017-06-24 17:20:55.670 basicKnowledgeDemo[3255:242297] strCopy:我是小明
2017-06-24 17:20:55.670 basicKnowledgeDemo[3255:242297] strStrong:我是小明

接下来改变mutableStr的值,然后在分别输出两个字符串的值

[mutableStr setString:@"我是小黑"];  
NSLog(@"strCopy:%@",self.strCopy);
NSLog(@"strStrong:%@",self.strStrong);

第二次输出结果,两个值不同,strCopy输出:我是小明,strStrong输出:我是小黑.可以看出用strong修饰的属性的值发生了改变.

2017-06-24 17:20:55.671 basicKnowledgeDemo[3255:242297] strCopy:我是小明
2017-06-24 17:20:55.671 basicKnowledgeDemo[3255:242297] strStrong:我是小黑
数组例子

定义数组

@property (nonatomic, strong) NSMutableArray * arrayStrong;

@property (nonatomic, copy) NSMutableArray * arrayCopy;

赋值操作并输出

NSMutableArray * arrayOri=[[NSMutableArray alloc]initWithArray:@[@"我是第一个内容",@"我是第二个内容"]];
self.arrayCopy=arrayOri;
self.arrayStrong=arrayOri;
NSLog(@"第一次输出");
NSLog(@"arrayCopy:%@",[self.arrayCopy componentsJoinedByString:@","]);
NSLog(@"arrayStrong:%@",[self.arrayStrong componentsJoinedByString:@","]);
[arrayOri removeLastObject];
NSLog(@"第二次输出,执行[arrayOri removeLastObject];后");
NSLog(@"arrayCopy:%@",[self.arrayCopy componentsJoinedByString:@","]);
NSLog(@"arrayStrong:%@",[self.arrayStrong componentsJoinedByString:@","]);

输出结果

2017-06-24 18:05:49.661 basicKnowledgeDemo[3496:277081] 第一次输出
2017-06-24 18:05:49.661 basicKnowledgeDemo[3496:277081] arrayCopy:我是第一个内容,我是第二个内容
2017-06-24 18:05:49.661 basicKnowledgeDemo[3496:277081] arrayStrong:我是第一个内容,我是第二个内容
2017-06-24 18:05:49.661 basicKnowledgeDemo[3496:277081] 第二次输出,执行[arrayOri removeLastObject];后
2017-06-24 18:05:49.661 basicKnowledgeDemo[3496:277081] arrayCopy:我是第一个内容,我是第二个内容
2017-06-24 18:05:49.662 basicKnowledgeDemo[3496:277081] arrayStrong:我是第一个内容

相关文章

网友评论

      本文标题:iOS NSString 的copy与strong

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