iOS面试题:对NSArray和NSMutableArray进行
2020-12-08 本文已影响0人
iOS心安
一、NSArray的copy和mutableCopy操作进行探究
//1、对NSArray分别使用`copy` & `mutableCopy`进行内存地址的对比
NSArray *orgArr = @[@"ningjianwen", @"kongjiangmei"];
NSArray *copyArr = [orgArr copy];
NSMutableArray *mcopyArr = [orgArr mutableCopy];
[mcopyArr addObject:@"jiangxianjin"];
NSLog(@"NSArray 地址对比结果打印:");
NSLog(@"orgArr 地址: %p", orgArr);
NSLog(@"copyArr 地址: %p", copyArr);
NSLog(@"mcopyArr 地址: %p", mcopyArr);
打印结果如下:
2019-06-13 20:05:48.915949+0800 ArrayCopyAndMutableCopy[54942:3399095] NSArray 地址对比结果打印:
2019-06-13 20:05:48.916073+0800 ArrayCopyAndMutableCopy[54942:3399095] orgArr 地址: 0x600003716bc0
2019-06-13 20:05:48.916189+0800 ArrayCopyAndMutableCopy[54942:3399095] copyArr 地址: 0x600003716bc0
2019-06-13 20:05:48.916266+0800 ArrayCopyAndMutableCopy[54942:3399095] mcopyArr 地址: 0x600003951b90
可以看出
orgArr
与copyArr
内存地址是一样的,说明copy
对NSArray
进行的是浅拷贝。mcopyArr
与orgArr
内存地址是不一致的,说明mutableCopy
对NSArray
进行的是深拷贝,且拷贝之后数组变成了一个可变数组。
作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS交流群:711315161,不管你是小白还是大牛欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!
二、NSMutableArray的copy和mutableCopy操作进行探究
//2、对NSMutableArray分别使用`copy` & `mutableCopy`进行内存地址的对比
NSMutableArray *orgMArr = [NSMutableArray arrayWithObjects:@"星辰", @"江河",nil];
NSArray *copyMArr = [orgMArr copy];
NSMutableArray *mcopyMArr = [orgMArr mutableCopy];
[mcopyMArr addObject:@"日月"];
NSLog(@"NSMutableArray 地址对比结果打印:");
NSLog(@"orgMArr 地址: %p", orgMArr);
NSLog(@"copyMArr 地址: %p", copyMArr);
NSLog(@"mcopyMArr 地址: %p", mcopyMArr);
打印结果如下:
2019-06-13 20:05:48.916348+0800 ArrayCopyAndMutableCopy[54942:3399095] NSMutableArray 地址对比结果打印:
2019-06-13 20:05:48.916418+0800 ArrayCopyAndMutableCopy[54942:3399095] orgMArr 地址: 0x600003951e90
2019-06-13 20:05:48.916482+0800 ArrayCopyAndMutableCopy[54942:3399095] copyMArr 地址: 0x600003716ba0
2019-06-13 20:05:48.916546+0800 ArrayCopyAndMutableCopy[54942:3399095] mcopyMArr 地址: 0x600003951da0
可以看出
copyMArr
与orgMArr
内存地址是不一致的,说明copy
对NSMutableArray
进行的是深拷贝,拷贝之后的新数组是一个不可变数组。
mcopyMArr
与orgMArr
内存地址是不一致的,说明mutableCopy
对NSMutableArray
进行的是深拷贝,且拷贝之后是一个新的可变数组。