iOS面试题面试

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

可以看出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

上一篇下一篇

猜你喜欢

热点阅读