关于NSArray使用时用strong修饰还是copy修饰问题测试
大家都知道,使用NSMutableArray时是用strong修饰,例如:
- @property (nonatomic,strong) NSMutableArray * mutableArray;
但是,NSArray呢?我看大多数人都直接使用strong,而且网上还有很多人说除了NSString用copy,其他对象类型都用strong。
那么,问题来了:当用strong修饰NSArray的时候,如果遇到用可变数组给它赋值怎么办?会导致意料之外的bug,看下面代码:
- //-------声明两个属性
- @property (nonatomic,strong) NSMutableArray * mutableArray;
- @property (nonatomic,strong) NSArray * array;
- //------执行如下代码
- self.mutableArray = [NSMutableArrayarray];
- [self.mutableArrayaddObject:@"1"];
- self.array = [NSArrayarray];
- self.array =self.mutableArray;
- NSLog(@"array---%@",self.array);
- [self.mutableArrayaddObject:@"2"];
- 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修饰问题测试相关推荐
- Copy修饰的NSArray
深复制与浅复制 简单点理解,深复制,在内存中拷贝一份新的对象. 浅复制,没有拷贝新的对象,只是一个地址的引用. 在赋值过程中深复制操作,原对象的引用计数不会增加,浅复制引用计数会加一. copy操作和 ...
- 前端 重构时需要注意的事项_驾驶式扫地车的功能特点和使用时需要注意事项...
扫地车 随着经济的发展,人们的生活水平不断提高,对生活环境的要求也越来越高,于是许多工厂.物业.超市.社区.市政单位等开始购买扫地车来进行路面清洁.一是清洗效果好,二是效率高,可以节省人工成本.扫地车 ...
- 有没搞错?Java 对象不使用时要赋值为 null?
点击上方蓝色"方志朋",选择"设为星标"回复"666"获取独家整理的学习资料! 许多Java开发者都曾听说过"不使用的对象应手动赋 ...
- 主成分分析(Principle Component Analysis)PCA的核心思想是什么?PCA算法的优缺点?增量PCA模型, 随机PCA, 模型、 核化PCA分别是什么?使用时如何选择?
主成分分析(Principle Component Analysis)PCA的核心思想是什么?增量PCA模型, 随机PCA, 模型. 核化PCA分别是什么?使用时如何选择? 主成分分析(Princip ...
- 场效应管的判别、检测及使用时的注意事项!
一.用指针式万用表对场效应管进行判别 1)用测电阻法判别结型场效应管的电极 根据场效应管的PN结正.反向电阻值不一样的现象,可以判别出结型场效应管的三个电极.具体方法:将万用表拨在R×1k档上,任选两 ...
- Mybatis使用时因jdbcType类型大小写书写不规范导致的异常
Mybatis使用时因jdbcType类型大小写书写不规范导致的异常 参考文章: (1)Mybatis使用时因jdbcType类型大小写书写不规范导致的异常 (2)https://www.cnblog ...
- 有没有搞错?Java 对象不使用时,要赋值为 null?
来源 | olarxiong.com/category/java/ 前言 最近,听粉丝讨论说,"不使用的对象应手动赋值为null" 这句话,而且好多开发者一直信奉着这句话:问其原因 ...
- Java中当对象不再使用时,不赋值为null会导致什么后果 ?
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | zhantong 来源 | https://w ...
- Turtlebot3-burger使用时一些注意事项
Turtlebot3-burger使用时一些注意事项 时间同步:Turtlebot3和PC的时间要同步. 把RPLidarA1换成A3之后,A3没有发布scan消息,如何解决?参照A1的编写启动文件? ...
最新文章
- 百面机器学习之经典算法
- WinRAR最新版V3.93 破解方法
- 【C++ Primer 第15章】定义派生类拷贝构造函数、赋值运算符
- npm安装报错Error: EPERM: operation not permitted解决方案
- 问题之sqlyou的使用
- linux网卡限速tc,linux tc 对本机网卡限速
- C++学习之路 | PTA乙级—— 1019 数字黑洞 (20分)(精简)
- php脚本启动,有没有办法启动一个PHP脚本并获得状态?
- python列表修改元素_如何在Python中替换多维列表的第n个元素?
- mui多层tab切换上拉加载的实现
- 2010年11.30日 爱普生 武昌培训 Technical workshop OPOS INSTALL
- Linux 设备树的解释 - DTB文件格式【转】
- 交叉方向乘子法(ADMM)算法
- Web接入QQ登陆简单入门操作
- 财务报表分析,Smartbi财务BI项目解决方案
- 如何正确地将Blender模型导入进Unity3D
- 抖音反编译学习(记录草稿)
- 字节跳动的“飞阅会”开会模式:先笔谈 后PK 直接生成会议纪要
- DS homework-队列
- 响铃:互金信贷的明天,或是一场一站式金融服务的盛宴
热门文章
- es6 取数组的第一个和最后一个_全球最恐怖的3个泳池,第一个有10层楼高,最后一个听名字就害怕...
- mariadb mysql 创建_MariaDB 创建数据库,学习MariaDB,MariaDB教程,MariaDB手册,MariaDB学习,MariaDB实例 | 开发学院...
- vue 指令 v-once
- python 实例创建
- opencv-api getStructuringElement
- git 应用 resetrevert
- 计算机辅助翻译与人工翻译论文,计算机辅助翻译:理念和工具[翻译研究新探论文献文集].pdf...
- url动态追加参数_url设置的注意事项有哪些?
- python语言能做什么游戏好玩_太好玩了我用 Python 制作一款小游戏
- VMware vSphere Client下增加虚拟机磁盘空间的方法