专栏首页ios 技术积累iOS NSMutableArray和NSArray实例执行mutableCopy和copy方法的区别?

iOS NSMutableArray和NSArray实例执行mutableCopy和copy方法的区别?

    NSMutableArray *arrM = [NSMutableArray arrayWithArray:@[@1,@2]];

    id cp1 = [arrM mutableCopy];
    id cp2 = [arrM copy];

    NSLog(@"arrM %p, class %@", arrM, NSStringFromClass([arrM class]));
    NSLog(@"cp1  %p, class %@", cp1, NSStringFromClass([cp1 class]));
    NSLog(@"cp2  %p, class %@", cp2, NSStringFromClass([cp2 class]));
    
    NSArray *arrI = @[@1,@2];

    id cp3 = [arrI mutableCopy];
    id cp4 = [arrI copy];

    NSLog(@"arrI %p, class %@", arrI, NSStringFromClass([arrI class]));
    NSLog(@"cp3  %p, class %@", cp3, NSStringFromClass([cp3 class]));
    NSLog(@"cp4  %p, class %@", cp4, NSStringFromClass([cp4 class]));
2020-06-19 15:59:06.153599+0800 Test[81342:2338254] arrM 0x600000c73090, class __NSArrayM
2020-06-19 15:59:06.153669+0800 Test[81342:2338254] cp1  0x600000c73030, class __NSArrayM
2020-06-19 15:59:06.153701+0800 Test[81342:2338254] cp2  0x600000245660, class __NSArrayI
2020-06-19 15:59:06.153739+0800 Test[81342:2338254] arrI 0x600000245680, class __NSArrayI
2020-06-19 15:59:06.153773+0800 Test[81342:2338254] cp3  0x600000c72fd0, class __NSArrayM
2020-06-19 15:59:06.153809+0800 Test[81342:2338254] cp4  0x600000245680, class __NSArrayI

上面的问题分两种情况:

  • 当可变对象mutablecopy和copy之后,都会生成新的对象,只是新的对象的类型一个是可变的一个是不可变的。
  • 当不可变对象mutablecopy和copy之后,只有mutablecopy会生成新的对象,copy则会只复制指针。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • iOS 说一下对 class_rw_t 的理解

    rw代表可读可写,ObjC 类中的属性、方法还有遵循的协议等信息都保存在 class_rw_t 中

    赵哥窟
  • Spring Boot 自动配置

    ○@SpringBootConfiguration:标记当前类为配置类 ○@EnableAutoConfiguration:开启自动配置 ○@Compone...

    赵哥窟
  • Flutter集成老的iOS项目

    今天来学习下Flutter如何集成在老的iOS项目中 参考iOS老项目如何集成Flutter

    赵哥窟
  • Django的主体页面抽取(七)

    在潦草的完成了注册与登录之后,下面开始编写平台的主体部分了。 忘记密码和恢复密码部分在最后完善的时候补上。

    zx钟
  • ztree实现左边动态生成树,右边为具体信息功能

    祈澈菇凉
  • bootstrap模态框之加载页面至modal-boby

    思路:使用$("#reserveForm").html(result); result为Ajax请求controller所返回的页面

    week
  • 深入理解JVM(七)——Class文件结构

    什么是JVM的“无关性”? Java具有平台无关性,也就是任何操作系统都能运行Java代码。之所以能实现这一点,是因为Java运行在虚拟机之上,不同的操作系统...

    大闲人柴毛毛
  • Bootstrap 时间日历插件bootstrap-datetimepicker配置与应用小结

    Bootstrap时间日历插件bootstrap-datetimepicker配置与应用小结

    授客
  • bootstrap

    花了一天时间学了下bootstrap入门,想必大家用css写前端页面的时候都很痛苦,bootstrap就是来解决这个问题的,它封装了css的很多样式,开发的时候...

    用户3112896
  • 微信小程序WXS特征及适用场景

    WXS(WeiXin Script)是微信创造的一套脚本语言,它的官方说法是:“WXS 与 JavaScript 是不同的语言,有自己的语法,并不和 JavaS...

    薛定喵君

扫码关注云+社区

领取腾讯云代金券