Objc 基础-copy与mutableCopy的区别
用过文本拷贝的小伙办都知道吧,假定A文本的内容是一封情书,拷贝生成B文本那也是一封情书,和A文本的内容是一致的,修改B文本对A文本是没有任何影响的,同样修改A文本对B文本也没有影响,这两个文件是独立存在互不影响的。开发中的拷贝也是一样的道理。
拷贝的特点是什么?产生一个副本对象,副本对象与源对象互不影响。
- 修改副本对象不影响源对象。
- 修改源对象不影响副本对象。
- 拷贝只适用于那些遵循NSCopying或NSMutableCopying协议的对象类型,继承自NSObject的子类都满足。
拷贝方法分两种:copy 和 mutableCopy。
严格来讲mutableCopy操作是只给Foundation框架自带的一些类去做事情的,只有他们才有区分产生可变或不可变的权利,如:字符串、字典、数组等;其他类是没有的,如:自定义类、UIKit中的类等。
只要是遵循NSCopying或NSMutableCopying协议的对象类型都具备拷贝能力,所以,只要是继承自NSObject的类都可以调用mutableCopy。
拷贝在底层怎么进行内存管理的?
- MRC环境下 当调用alloc、new、copy、mutableCopy方法返回了一个对象,在不需要这个对象时,要调用release或者autorelease来释放它;
- ARC环境下 编译器会自动进行内存管理,了解MRC环境下怎么进行内存管理,有助于开发理解。
是否具备具备区分可变/不可变的能力?
- 一般只有Foundation框架自带的一些类才具备区分可变/不可变的能力,如:字符串、数组、字典等。
- copy和mutableCopy,使用有区别,返回可能是可变/不可变的对象。