//可變集合類和不可變集合類的copy和mutablecopy有什么區(qū)別?如果是集合是內(nèi)容復(fù)制的話,集合里面的元素也是內(nèi)容復(fù)制么?
- (void)copyAndMutableCopy{
NSMutableArray *mutableAry = [NSMutableArray arrayWithObjects:@"a",nil];
NSArray *ary = [NSArray arrayWithObjects:@"b",nil];
id copyMutableAry = [mutableAry copy];
id copyAry = [ary copy];
id mutableArymutableCopy = [mutableAry mutableCopy];
id mutableCopyAry = [ary mutableCopy];
NSLog(@"mutableAry:%@ ,內(nèi)存地址%p -- 指針地址%p",mutableAry,mutableAry,&mutableAry);
NSLog(@"ary:%@ ,內(nèi)存地址%p -- 指針地址%p",ary,ary,&ary);
NSLog(@"==================這是華麗麗的分割線==================");
NSLog(@"copyMutableAry:%@ ,內(nèi)存地址%p -- 指針地址%p",copyMutableAry,copyMutableAry,?MutableAry);
NSLog(@"copyAry:%@ ,內(nèi)存地址%p -- 指針地址%p",copyAry,copyAry,?Ary);
NSLog(@"==================這是華麗麗的分割線==================");
NSLog(@"mutableArymutableCopy:%@ ,內(nèi)存地址%p -- 指針地址%p",mutableArymutableCopy,mutableArymutableCopy,&mutableArymutableCopy);
NSLog(@"mutableCopyAry:%@ ,內(nèi)存地址%p -- 指針地址%p",mutableCopyAry,mutableCopyAry,&mutableCopyAry);
}
log
2017-08-10 16:04:40.287 Test[13049:755504] mutableAry:(a) ,內(nèi)存地址0x61000004ce40 -- 指針地址0x7fff54dbfa58
2017-08-10 16:04:40.287 Test[13049:755504] ary:(b) ,內(nèi)存地址0x61000000ff50 -- 指針地址0x7fff54dbfa50
2017-08-10 16:04:40.288 Test[13049:755504] ==================這是華麗麗的分割線==================
2017-08-10 16:04:40.288 Test[13049:755504] copyMutableAry:(a) ,內(nèi)存地址0x61000000ff60 -- 指針地址0x7fff54dbfa48
2017-08-10 16:04:40.288 Test[13049:755504] copyAry:(b) ,內(nèi)存地址0x61000000ff50 -- 指針地址0x7fff54dbfa40
2017-08-10 16:04:40.288 Test[13049:755504] ==================這是華麗麗的分割線==================
2017-08-10 16:04:40.288 Test[13049:755504] mutableArymutableCopy:(a) ,內(nèi)存地址0x61000004cd20 -- 指針地址0x7fff54dbfa38
2017-08-10 16:04:40.288 Test[13049:755504] mutableCopyAry:(b) ,內(nèi)存地址0x61000004ce10 -- 指針地址0x7fff54dbfa30
總結(jié):使用copy時 可變集合的指針地址以及內(nèi)存地址都不相同 ?深復(fù)制 ?不可變集合的指針地址不一樣但是內(nèi)存地址一樣 屬于淺復(fù)制
使用mutableCopy的時候無論是可變集合還是不可變集合的指針地址和內(nèi)存地址都不同 都屬于深復(fù)制