Objective-C的对象复制
2019-06-09 09:13
1706 查看
copy 与mutableCopy方法
由 NSObject提供:在调用俩个方法时,他俩还会调用另俩个方法 copyWithZone 和 mutableCopyWithZone,后俩中方法返回复制的副本。后俩个方法的内容除名字外基本一致,所以前俩个方法是控制返回对象的一些特征。
copy返回的是不可修改的副本,即使原来的对象是可修改的
mutableCopy返回的可以修改的副本,即使原来的对象是不可修改的。
而俩者的复制均为浅复制。
之前在做软件协会的纳新题时,曾经有一道指针的题困扰过我,它问的大致意思是用指针修改内容会不会有隐患?
首先我们要明白,指针变量它存储的是一个地址
int *p ,q; q = 2; p = q;
好多人总是把最后一句话解读为把q赋值给p,其实是错误的,p是一个指针变量,它只能存地址,我们一般说p指向q,为什么这样说,因为p里放的q的地址,那么它就是指向q的,你心血来潮想修改p的值,p = 3;因为p和q的地址是一样的,这样做,是把这个地址所代表的值换成了3,所以q和p此时都是3.
而copyWithZone 和 mutableCopyWithZone里都是浅复制,他们返回的都是可修改的副本, copy 与mutableCopy方法里还有另外一个协议,NSCopying和NSMutableCopying,遵守这个协议才返回可修改和不可修改的对象。
- (id)copyWithZone : (NSZone *)zone { - NSLog(@"执行copyWithZone:--"); - FKDog * dog = [[self class] allocWithZone : zone] init]; - dog.name = [self.name mutableCopy]; - dog.age = self.age; - return dog; - }
先将原对象的name属性复制了一份可变副本,然后将这个可变副本赋值给新对象,实现了深复制的copyWithZone。
相关文章推荐
- Objective-C 对象复制
- Objective-C:OC内部可变对象和不可变对象的深(复制)拷贝问题思考:
- 黑马程序员——Objective-C程序设计(第4版)学习笔记之18-复制对象——黑马 IOS 技术博客
- Programming in Objective-C 学习笔记09——对象复制与归档
- 【IOS 开发学习总结-OC-27】★★objective-c之foundation 框架——对象复制
- 《Objective-C编程全解》 读书笔记 第十三章 对象的复制及存储
- Objective-C路成魔【18-复制对象】
- [学习笔记—Objective-C]《Objective-C 程序设计 第6版》第十八章 复制对象
- 【Objective-C高级编程】iOS与OS X多线程和内存管理(八) __block 从栈上复制到堆 截获对象 数组
- Objective-C中的对象复制
- objective-c中对象复制的几种情况
- 【IOS 开发】Objective-C Foundation 框架 -- 字符串 | 日期 | 对象复制 | NSArray | NSSet | NSDictionary | 谓词
- 【IOS 开发】Objective-C Foundation 框架 -- 字符串 | 日期 | 对象复制 | NSArray | NSSet | NSDictionary | 谓词
- Objective-C 对象复制 简单实现
- Objective-C 对象复制(深复制/浅复制)
- Objective-C 对象复制 简单实现
- Objective-C 对象复制 简单实现
- Objective-C之成魔之路【18-复制对象】
- Objective-C之成魔之路【18-复制对象】
- objective-c 复制对象