iOS面试题:对NSArray和NSMutableArray进行copy和mutableCopy分别会得到什么样的数组?

一、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

可以看出orgArrcopyArr内存地址是一样的,说明copyNSArray进行的是浅拷贝。mcopyArrorgArr内存地址是不一致的,说明mutableCopyNSArray进行的是深拷贝,且拷贝之后数组变成了一个可变数组。

作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的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

可以看出copyMArrorgMArr内存地址是不一致的,说明copyNSMutableArray进行的是深拷贝,拷贝之后的新数组是一个不可变数组。
mcopyMArrorgMArr内存地址是不一致的,说明mutableCopyNSMutableArray进行的是深拷贝,且拷贝之后是一个新的可变数组。

https://www.ucloud.cn/yun/17336.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容