怎么用copy关键字
2016-03-08 10:43
337 查看
出题者简介: 孙源(sunnyxx),目前就职于百度
整理者简介:陈奕龙,目前就职于滴滴出行。
转载者:豆电雨(starain)微信:doudianyu
用途:
NSString、NSArray、NSDictionary 等等经常使用copy关键字,是因为他们有对应的可变类型:NSMutableString、NSMutableArray、NSMutableDictionary;
block 也经常使用 copy 关键字,具体原因见官方文档:Objects Use Properties to Keep Track of Blocks:
block 使用 copy 是从 MRC 遗留下来的“传统”,在 MRC 中,方法内部的 block 是在栈区的,使用 copy 可以把它放到堆区.在 ARC 中写不写都行:对于 block 使用 copy 还是 strong 效果是一样的,但写上 copy 也无伤大雅,还能时刻提醒我们:编译器自动对 block 进行了 copy 操作。如果不写 copy ,该类的调用者有可能会忘记或者根本不知道“编译器会自动对 block 进行了 copy 操作”,他们有可能会在调用之前自行拷贝属性值。这种操作多余而低效。
下面做下解释: copy 此特质所表达的所属关系与 strong 类似。然而设置方法并不保留新值,而是将其“拷贝” (copy)。 当属性类型为 NSString 时,经常用此特质来保护其封装性,因为传递给设置方法的新值有可能指向一个 NSMutableString 类的实例。这个类是 NSString 的子类,表示一种可修改其值的字符串,此时若是不拷贝字符串,那么设置完属性之后,字符串的值就可能会在对象不知情的情况下遭人更改。所以,这时就要拷贝一份“不可变” (immutable)的字符串,确保对象中的字符串值不会无意间变动。只要实现属性所用的对象是“可变的” (mutable),就应该在设置新属性值时拷贝一份。
用
@property声明 NSString、NSArray、NSDictionary 经常使用 copy 关键字,是因为他们有对应的可变类型:NSMutableString、NSMutableArray、NSMutableDictionary,他们之间可能进行赋值操作,为确保对象中的字符串值不会无意间变动,应该在设置新属性值时拷贝一份。
该问题在下文中也有论述:用@property声明的NSString(或NSArray,NSDictionary)经常使用copy关键字,为什么?如果改用strong关键字,可能造成什么问题?
相关文章推荐
- archLinux ibus 中文 双拼音的安装
- archLinux VirtualBox增强设置
- 在linux下安装jdk环境
- linux下安装tomcat方法
- tomcat的三种部署方式
- Linux系统搭建Tactic服务
- 1.设置用户A对目录C有rw权限,用户B对目录C有只读权限。
- LINUX 中的 dump 和 restore 命令
- Docker简明教程
- Linux三剑客之grep伐木累(正则表达式)
- Photoshop问题:保存图片时出现“无法完成请求,因为程序错误”
- Ubuntu快捷键 终端快捷键
- 大型网站架构系列:分布式消息队列
- centos yum源配置问题解决办法
- 汇编语言寻址方式(Linux)
- 出现make: *** No rule to make target `all'. Stop.解决办法
- linux下PS1命令提示符设置 包含颜色设置
- 大型网站架构系列:20本技术书籍推荐
- Ubuntu下安装配置JDK,Tomcat,MySql
- 大型网站架构系列:负载均衡详解