大家都知道,使用NSMutableArray时是用strong修饰,例如:

[objc] view plaincopy
  1. @property (nonatomic,strong) NSMutableArray * mutableArray;

但是,NSArray呢?我看大多数人都直接使用strong,而且网上还有很多人说除了NSString用copy,其他对象类型都用strong。

那么,问题来了:当用strong修饰NSArray的时候,如果遇到用可变数组给它赋值怎么办?会导致意料之外的bug,看下面代码:

[objc] view plaincopy
  1. //-------声明两个属性
  2. @property (nonatomic,strong) NSMutableArray * mutableArray;
  3. @property (nonatomic,strong) NSArray * array;
[objc] view plaincopy
  1. //------执行如下代码
  2. self.mutableArray = [NSMutableArrayarray];
  3. [self.mutableArrayaddObject:@"1"];
  4. self.array = [NSArrayarray];
  5. self.array =self.mutableArray;
  6. NSLog(@"array---%@",self.array);
  7. [self.mutableArrayaddObject:@"2"];
  8. NSLog(@"array---%@",self.array);

//------运行结果

array---(

    1

)

array---(

    1,

    2

)

也就是说,self.array在没有被直接操作的情况下,跟着self.mutableArray 变化了,这是很危险的。

如果,把array用copy修饰,也就是

@property (nonatomic, copy) NSArray * array;

运行结果会如下:

array---(

    1

)

 array---(

    1

)

这次self.array不会跟随self.mutableArray 变化了。

综上:在可能遇到可变数组给不可变数组直接赋值的情况下,使用copy修饰不可变数组。

我一直使用copy修饰不可变数组,目前还未出现过问题。

关于强弱指针的知识,建议大家参考:点击打开链接

转载于:https://www.cnblogs.com/pioneerMax/p/6698348.html

关于NSArray使用时用strong修饰还是copy修饰问题测试相关推荐

  1. Copy修饰的NSArray

    深复制与浅复制 简单点理解,深复制,在内存中拷贝一份新的对象. 浅复制,没有拷贝新的对象,只是一个地址的引用. 在赋值过程中深复制操作,原对象的引用计数不会增加,浅复制引用计数会加一. copy操作和 ...

  2. 前端 重构时需要注意的事项_驾驶式扫地车的功能特点和使用时需要注意事项...

    扫地车 随着经济的发展,人们的生活水平不断提高,对生活环境的要求也越来越高,于是许多工厂.物业.超市.社区.市政单位等开始购买扫地车来进行路面清洁.一是清洗效果好,二是效率高,可以节省人工成本.扫地车 ...

  3. 有没搞错?Java 对象不使用时要赋值为 null?

    点击上方蓝色"方志朋",选择"设为星标"回复"666"获取独家整理的学习资料! 许多Java开发者都曾听说过"不使用的对象应手动赋 ...

  4. 主成分分析(Principle Component Analysis)PCA的核心思想是什么?PCA算法的优缺点?增量PCA模型, 随机PCA, 模型、 核化PCA分别是什么?使用时如何选择?

    主成分分析(Principle Component Analysis)PCA的核心思想是什么?增量PCA模型, 随机PCA, 模型. 核化PCA分别是什么?使用时如何选择? 主成分分析(Princip ...

  5. 场效应管的判别、检测及使用时的注意事项!

    一.用指针式万用表对场效应管进行判别 1)用测电阻法判别结型场效应管的电极 根据场效应管的PN结正.反向电阻值不一样的现象,可以判别出结型场效应管的三个电极.具体方法:将万用表拨在R×1k档上,任选两 ...

  6. Mybatis使用时因jdbcType类型大小写书写不规范导致的异常

    Mybatis使用时因jdbcType类型大小写书写不规范导致的异常 参考文章: (1)Mybatis使用时因jdbcType类型大小写书写不规范导致的异常 (2)https://www.cnblog ...

  7. 有没有搞错?Java 对象不使用时,要赋值为 null?

    来源 | olarxiong.com/category/java/ 前言 最近,听粉丝讨论说,"不使用的对象应手动赋值为null" 这句话,而且好多开发者一直信奉着这句话:问其原因 ...

  8. Java中当对象不再使用时,不赋值为null会导致什么后果 ?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | zhantong 来源 | https://w ...

  9. Turtlebot3-burger使用时一些注意事项

    Turtlebot3-burger使用时一些注意事项 时间同步:Turtlebot3和PC的时间要同步. 把RPLidarA1换成A3之后,A3没有发布scan消息,如何解决?参照A1的编写启动文件? ...

最新文章

  1. 百面机器学习之经典算法
  2. WinRAR最新版V3.93 破解方法
  3. 【C++ Primer 第15章】定义派生类拷贝构造函数、赋值运算符
  4. npm安装报错Error: EPERM: operation not permitted解决方案
  5. 问题之sqlyou的使用
  6. linux网卡限速tc,linux tc 对本机网卡限速
  7. C++学习之路 | PTA乙级—— 1019 数字黑洞 (20分)(精简)
  8. php脚本启动,有没有办法启动一个PHP脚本并获得状态?
  9. python列表修改元素_如何在Python中替换多维列表的第n个元素?
  10. mui多层tab切换上拉加载的实现
  11. 2010年11.30日 爱普生 武昌培训 Technical workshop OPOS INSTALL
  12. Linux 设备树的解释 - DTB文件格式【转】
  13. 交叉方向乘子法(ADMM)算法
  14. Web接入QQ登陆简单入门操作
  15. 财务报表分析,Smartbi财务BI项目解决方案
  16. 如何正确地将Blender模型导入进Unity3D
  17. 抖音反编译学习(记录草稿)
  18. 字节跳动的“飞阅会”开会模式:先笔谈 后PK 直接生成会议纪要
  19. DS homework-队列
  20. 响铃:互金信贷的明天,或是一场一站式金融服务的盛宴

热门文章

  1. es6 取数组的第一个和最后一个_全球最恐怖的3个泳池,第一个有10层楼高,最后一个听名字就害怕...
  2. mariadb mysql 创建_MariaDB 创建数据库,学习MariaDB,MariaDB教程,MariaDB手册,MariaDB学习,MariaDB实例 | 开发学院...
  3. vue 指令 v-once
  4. python 实例创建
  5. opencv-api getStructuringElement
  6. git 应用 resetrevert
  7. 计算机辅助翻译与人工翻译论文,计算机辅助翻译:理念和工具[翻译研究新探论文献文集].pdf...
  8. url动态追加参数_url设置的注意事项有哪些?
  9. python语言能做什么游戏好玩_太好玩了我用 Python 制作一款小游戏
  10. VMware vSphere Client下增加虚拟机磁盘空间的方法