深拷贝与浅拷贝
来源:互联网 发布:淘宝短发女模特叫什么 编辑:程序博客网 时间:2024/06/05 05:45
以后定义属性,逢NSString ,NSarray ,NSDitionary,写copy比写retain更安全,防止外界给你赋值一个可变对象,赋值完之后对可变对象做修改,会导致已经赋过值的也会被改动,使用copy的话,内不会拷贝出一个新对象,源对象做修改,赋值过的不变
郑重警告:此种方法,不适用于NSMutableString,NSMutableArray,NAMutableDitionary,NSMutableset,因为一旦赋值,就会拷出一个不可变的对象,就不能修改内容了
郑重警告:此种方法,不适用于NSMutableString,NSMutableArray,NAMutableDitionary,NSMutableset,因为一旦赋值,就会拷出一个不可变的对象,就不能修改内容了
对于NSString ,NSArray ,NSDictionary ,NSSet,对于copy是浅拷贝(拷贝指针),copy相当于retain
对于NSString ,NSMUtableArray,NSMutableDictionary, NSMUtableSet ,对它拷贝是深拷贝(拷贝内容),会拷出一个新对象,拷贝出的新对象是不可变对象
对于NSString ,对它是浅拷贝(拷贝指针),copy相当于retain
对于NSString ,对它拷贝是深拷贝(拷贝内容),会拷出一个新对象,拷贝出的新对象是不可变对象
浅拷贝 (拷贝需要遵守 NSCopying协议)
NSString * string = [NSString stringWithFormat:@"蓝鸥"];
NSLog(@"%lu",[string retainCount]);
NSLog(@"%p",string);
NSString * newString = [string copy];
NSLog(@"new %lu",[newString retainCount]);
NSLog(@"%p",newString); //仅仅是引用计数加1,地址没变
深拷贝,内容不可变
NSMutableString * string1 = [NSMutableString stringWithFormat:@"蓝鸥科技"];
NSLog(@" %lu ",[string1 retainCount]);
NSLog(@"%p",string1);
NSString * newString1 = [string1 copy];
[newString1 deleteCharactersInRange:NSMakeRange(2, 2)]; //不可变的不可以删除
NSLog(@" new1 %lu ",[newString1 retainCount]);
NSLog(@"%p",newString1);
对于mutableCopy,是是深拷贝,会拷贝出一个新对象,新对象是可变的
不可变的 新对象是可变的
NSString * string2 = [NSString stringWithFormat:@"蓝鸥科技"];
NSLog(@" %lu ",[string2 retainCount]);
NSLog(@"%p",string2);
NSMutableString * newString2 = [string2 mutableCopy];
[newString2 deleteCharactersInRange:NSMakeRange(2, 2)];
NSLog(@"new2 %lu ",[newString2 retainCount]);
NSLog(@"new2 %p",newString2);
可变的 新对象是可变的
NSMutableString * string3 = [NSMutableString stringWithFormat:@"蓝鸥科技"];
NSLog(@" %lu ",[string3 retainCount]);
NSLog(@"%p",string3);
NSMutableString * newString3 = [string3 mutableCopy];
[newString3 deleteCharactersInRange:NSMakeRange(2, 2)];
NSLog(@"new3 %lu ",[newString3 retainCount]);
NSLog(@"new3 %p",newString3);
NSMutableString * string = [NSMutableString stringWithFormat:@"蓝鸥科技"];
Person * person = [[Person alloc] init];
person.name = string;
[string deleteCharactersInRange:NSMakeRange(2, 2)]; //若是retain,赋给可变的,删除会影响给name赋值
[person sayHI];
[person release];
对于NSString ,对它是浅拷贝(拷贝指针),copy相当于retain
对于NSString ,对它拷贝是深拷贝(拷贝内容),会拷出一个新对象,拷贝出的新对象是不可变对象
浅拷贝 (拷贝需要遵守 NSCopying协议)
NSString * string = [NSString stringWithFormat:@"蓝鸥"];
NSLog(@"%lu",[string retainCount]);
NSLog(@"%p",string);
NSString * newString = [string copy];
NSLog(@"new %lu",[newString retainCount]);
NSLog(@"%p",newString); //仅仅是引用计数加1,地址没变
深拷贝,内容不可变
NSMutableString * string1 = [NSMutableString stringWithFormat:@"蓝鸥科技"];
NSLog(@" %lu ",[string1 retainCount]);
NSLog(@"%p",string1);
NSString * newString1 = [string1 copy];
[newString1 deleteCharactersInRange:NSMakeRange(2, 2)]; //不可变的不可以删除
NSLog(@" new1 %lu ",[newString1 retainCount]);
NSLog(@"%p",newString1);
对于mutableCopy,是是深拷贝,会拷贝出一个新对象,新对象是可变的
不可变的 新对象是可变的
NSString * string2 = [NSString stringWithFormat:@"蓝鸥科技"];
NSLog(@" %lu ",[string2 retainCount]);
NSLog(@"%p",string2);
NSMutableString * newString2 = [string2 mutableCopy];
[newString2 deleteCharactersInRange:NSMakeRange(2, 2)];
NSLog(@"new2 %lu ",[newString2 retainCount]);
NSLog(@"new2 %p",newString2);
可变的 新对象是可变的
NSMutableString * string3 = [NSMutableString stringWithFormat:@"蓝鸥科技"];
NSLog(@" %lu ",[string3 retainCount]);
NSLog(@"%p",string3);
NSMutableString * newString3 = [string3 mutableCopy];
[newString3 deleteCharactersInRange:NSMakeRange(2, 2)];
NSLog(@"new3 %lu ",[newString3 retainCount]);
NSLog(@"new3 %p",newString3);
NSMutableString * string = [NSMutableString stringWithFormat:@"蓝鸥科技"];
Person * person = [[Person alloc] init];
person.name = string;
[string deleteCharactersInRange:NSMakeRange(2, 2)]; //若是retain,赋给可变的,删除会影响给name赋值
[person sayHI];
[person release];
0 0
- 深拷贝与浅拷贝
- 深拷贝与浅拷贝
- 深拷贝与浅拷贝
- “浅拷贝”与“深拷贝”
- 深拷贝与浅拷贝
- 深拷贝与浅拷贝
- 深拷贝与浅拷贝
- 浅拷贝与深拷贝
- 深拷贝与浅拷贝
- 深拷贝与浅拷贝
- “浅拷贝”与“深拷贝”
- 深拷贝与浅拷贝
- 浅拷贝与深拷贝
- 深拷贝与浅拷贝
- 浅拷贝与深拷贝
- 深拷贝与浅拷贝
- 深拷贝与浅拷贝
- 深拷贝与浅拷贝
- mysql的常用查询辅助函数汇总
- HDU1142——A Walk Through the Forest(spfa+记忆化搜索)
- LeetCode之Merge Sorted Array
- iOS 耳机的简单知识
- hdu 4360 As long as Binbin loves Sangsang(最短路)
- 深拷贝与浅拷贝
- JS知识一:系统知识笔记总结
- 图片上传类(C#)
- 【正则表达式学习】元字符
- 多校第四场 1010 hdu 5336 XYZ and Drops(bfs+模拟)
- Ubuntu-安装-theano+caffe-超详细教程
- 小细节大作为:提高iOS访问权限通过率有这几个办法
- pat(B) 1001. 害死人不偿命的(3n+1)猜想
- androidstudio使用笔记