Table of Content
copy 与 mutableCopy
普通对象的拷贝
-
copy的目的是在修改原始版本和副本的时候,彼此各不干扰
-
copy
拷贝为不可变对象 -
mutableCopy
拷贝为可变对象
源对象 | 方式 | 操作 | 类型 |
---|---|---|---|
不可变 | copy | 引用计数+1 | 浅拷贝,指针拷贝 |
mutableCopy | 新建副本 | 深拷贝,对象拷贝 | |
可变 | copy | ||
mutableCopy |
-
@property (nonatomic, copy) NSString *str;
-
给copy属性设置数值时,默认会做一次copy操作,拷贝出不可变的版本
-
目标值是可变的,会建立一个不可变的副本
-
目标值是不可变的,只是引用计数+1,于strong等效
-
-
在OC中,对象真正的类型是实例化对象的时候,所采用的类型决定的
自定义对象的拷贝
-
在很多第三方框架或者大型的应用程序中,会给自定义对象提供copy方法,方便快速建立类似的副本
-
自定义对象要支持copy方法,需要做两件事
-
遵守
<NSCopying>
协议 -
实现
copyWithZone
方法
-
Zone
-
空间,在非常底层才会使用,给对象分配内存空间的时候,是在堆中的
-
Zone是如果程序员希望堆中的分配空间相对连续,或者集中才会使用
-
目的是为了减少对中的内存碎片,一般程序开发不需要,也完全没有必要关心
-
copy方法,最终会调用到copyWithZone方法