深拷贝与浅拷贝属于内容管理的基础知识,如果对这块不是很了解,平时在开发项目的过程中,很有可能会产生bug或者造成循环引用,也有可能会造成内容泄露,导致程序崩溃。这块的知识点非常重要、必须掌握。
首先是定义:
- 深拷贝:内存地址的拷贝,拷贝的对象在内存中分配了一份空间,并指向了它,两个指针指向的是不同的地址
- 浅拷贝:指针的拷贝,内容地址是相同的,两个指针指向的是同一个内存地址
对象类型 | 拷贝方式 | 拷贝结果对象类型 | 是否生成新的内存地址 | 拷贝类型(深/浅) |
NSString | copy | NSString | 否 | 浅拷贝(指针拷贝) |
mutableCopy | NSMutableString | 是 | 深拷贝(内容拷贝) | |
NSMutableString | copy | NSString | 是 | 深拷贝(内容拷贝) |
mutableCopy | NSMutableSting | 是 | 深拷贝(内容拷贝) | |
NSArray | copy | NSArray | 否 | 浅拷贝(指针拷贝) |
mutableCopy | NSMutableArray | 是 | 深拷贝(内容拷贝) | |
NSMutableArray | copy | NSArray | 是 | 深拷贝(内容拷贝) |
mutableCopy | NSMutableArray | 是 | 深拷贝(内容拷贝) | |
NS* | copy | NS* | 否 | 浅拷贝(指针拷贝) |
mutableCopy | NSMutable* | 是 | 深拷贝(内容拷贝) | |
NSMutable* | copy | NS* | 是 | 深拷贝(内容拷贝) |
mutableCopy | NSMutable* | 是 | 深拷贝(内容拷贝) |