本文共 3234 字,大约阅读时间需要 10 分钟。
copy操作:
NSString *str = @"123"; NSString *copyStr = [str copy]; NSLog(@"%p ---- %p", str, copyStr); NSMutableString *mutableStr = [NSMutableString stringWithString:@"123"]; NSString *copyMutableStr = [mutableStr copy]; NSLog(@"%p ---- %p", mutableStr, copyMutableStr);
打印结果:
2019-10-27 00:45:57.085342+0800 iii[17764:606331] 0x1043560a8 ---- 0x1043560a82019-10-27 00:45:57.085455+0800 iii[17764:606331] 0x6000037de4c0 ---- 0xb44a90872ddcc8d4
可知:
mutableCopy操作:
NSString *str = @"123"; NSString *copyStr = [str mutableCopy]; NSLog(@"%p ---- %p", str, copyStr); NSMutableString *mutableStr = [NSMutableString stringWithString:@"123"]; NSString *copyMutableStr = [mutableStr mutableCopy]; NSLog(@"%p ---- %p", mutableStr, copyMutableStr);
打印结果:
2019-10-27 00:53:35.014694+0800 iii[17841:609737] 0x105a190a8 ---- 0x600003d97ab02019-10-27 00:53:35.014830+0800 iii[17841:609737] 0x600003d97ae0 ---- 0x600003d97b10
可知:
无论是NSString还是NSMutableString类型,进行mutableCopy操作都是深复制copy操作:
NSArray *array = @[@"aaa", @"bbb"]; NSArray *copyArray = [array copy]; NSLog(@"%p ---- %p", array, copyArray); NSMutableArray *mutableArray = [NSMutableArray arrayWithObjects:@"aaa", @"bbb", nil]; NSArray *copyMutableArray = [mutableArray copy]; NSLog(@"%p ---- %p", mutableArray, copyMutableArray);
打印结果:
2019-10-27 00:59:58.672244+0800 iii[17941:612750] 0x6000011f4960 ---- 0x6000011f49602019-10-27 00:59:58.672385+0800 iii[17941:612750] 0x600001f9bc90 ---- 0x6000011910c0
可知:
与非集合类对象结果相同:mutableCopy操作 :
NSArray *array = @[@"aaa", @"bbb"]; NSArray *copyArray = [array mutableCopy]; NSLog(@"%p ---- %p", array, copyArray); NSMutableArray *mutableArray = [NSMutableArray arrayWithObjects:@"aaa", @"bbb", nil]; NSArray *copyMutableArray = [mutableArray mutableCopy]; NSLog(@"%p ---- %p", mutableArray, copyMutableArray);
打印结果:
2019-10-27 01:02:48.055444+0800 iii[17970:614232] 0x600000bbcda0 ---- 0x6000005c88402019-10-27 01:02:48.055563+0800 iii[17970:614232] 0x6000005c8450 ---- 0x6000005c8c00
与非集合类对象结果相同:
无论是NSArray还是NSMutableArray类型,进行mutableCopy操作都是深复制打印数组中元素地址:
NSArray *array = @[@"111", @"222"]; NSArray *copyArray = [array mutableCopy]; NSLog(@"%p ---- %p", array[0], copyArray[0]); NSMutableArray *mutableArray = [NSMutableArray arrayWithObjects:@"aaa", @"bbb", nil]; NSArray *copyMutableArray = [mutableArray mutableCopy]; NSLog(@"%p ---- %p", mutableArray[0], copyMutableArray[0]);
打印结果:
2019-10-27 01:08:17.634645+0800 iii[18027:616895] 0x103ddc0b8 ---- 0x103ddc0b82019-10-27 01:08:17.634780+0800 iii[18027:616895] 0x103ddc118 ---- 0x103ddc118
可知
元素的地址并没有发生变化,即为单层深复制要实现元素地址的改变,即完全深复制,可使用协议或归档解档实现,写这篇文章时还没有了解到,现在补上博客:
转载地址:http://kzkti.baihongyu.com/