对象复制
来源:互联网 发布:淘宝网中老年裙子 编辑:程序博客网 时间:2024/06/01 13:36
一.copy
与mutablecopy
方法
copy方法总是返回对象的不可修改的副本;mutablecopy方法总是返回该对象可修改的副本。当程序对复制的副本进行修改时,原对象不会受到影响。
NSString *book = @"Hello"; NSMutableString *bookMutable = [book mutableCopy]; [bookMutable replaceCharactersInRange:NSMakeRange(2, 3) withString:@"Shit"]; NSMutableString *ebook = [NSMutableString stringWithString:@"Hello"]; NSString *ebookCopy = [ebook copy];
二.NSCopying与NSMutableCopying协议
为了保证一个对象可以调用copy(mutablecopy)方法来复制自身的不可变副本(可变副本),通常需要做如下事情:
- 让该类实现
NSCopying(NSMutableCopying)
协议 - 让该类实现
copyWithZone:(mutableCopyWithZone:)
方法
当调用对象的copy
(mutablecopy
)方法复制自身时,底层需要调用copyWithZone:
(mutableCopyWithZone:
)方法的返回值。
-(id)copyWithZone:(NSZone *)zone{TT *t = [[[self class] allocWithZone:zone] init];t.name = self.name;t.age = self.age;return t;}
三.浅复制与深复制
当对象的实例变量是指针变量时,如果程序只是复制该指针的地址,而不是真正复制指针所指向的对象,这种复制就称为浅复制。
-(id)copyWithZone:(NSZone *)zone{TT *t = [[[self class] allocWithZone:zone] init];t.name = self.name;t.age = self.age;return t;}
上述代码实现的就是浅复制,因为对象t的name属性是指针类型。再看一下深复制:
-(id)copyWithZone:(NSZone *)zone{TT *t = [[[self class] allocWithZone:zone] init];t.name = [self.name mutablecopy];t.age = self.age;return t;}
Foundation框架中的类大部分都只实现了浅复制。
0 0
- 对象复制
- 复制对象
- 复制对象
- 复制对象
- 复制对象
- 复制对象
- 对象复制
- 复制对象
- 对象复制
- 复制对象
- 对象复制
- 复制对象
- 对象复制
- 对象复制
- 对象复制和对象赋值
- 复制对象句柄
- 对象复制例子
- 关于复制对象
- MySQL 5.7 新特性解读
- 架构探险 学习笔记
- 大神给你分析HTTPS和HTTP的区别
- Hive数据迁移
- 轻巧级记事本的开发
- 对象复制
- 类字节大小,字节对齐相关
- 分治与递归法:全排列问题
- pandas 模块学习
- 集算器协助报表工具实现跨行运算
- “Device eth0 does not seem to be present”解决办法
- Azkaban Quick Start
- linux命令
- PAT1010(BUG)