Objective-C深复制和<NSCopying>协议
2014-02-04 00:00
197 查看
摘要: 简单复制只能实现浅拷贝:指针赋值,使两个指针指向相同的一块内存空间,操作不安全。
1.简单复制只能实现浅拷贝:指针赋值,使两个指针指向相同的一块内存空间,操作不安全。
2. Foundation类已经遵守了<NSCopying>和 <NSMutableCopying>协议,即实现了copy和mutableCopy方法,因此Foundation对象可以使用这些方法创建对象的副本或可变副本
3.用户自定义类遵守<NSCopying>协议和<NSMutableCopying>协议,则必须实现copyWithZone方法和mutableCopyWithZone方法,否则该类对象无法响应copy和mutableCopy消息
4.实现copyWithZone方法,例:
对应main函数中:假设已经有一个Student对象stu1;
则:Student stu2 = [stu1 copy];
实现stu2是stu1的副本,这里是深复制,stu1和stu2分别对应不同内存。
5. 如果你的类产生了子类,那么copyWithZone:方法也将
被继承
Student *stu = [[Student allocWithZone: zone] init];
该方法应该改为: Student *stu = [[[self class] allocWithZone: zone]init];
如果编写一个类的copyWithZone:方法那么子类的方法应该先调用父类的copy方法以复制继承来的copy实例变量.
1.简单复制只能实现浅拷贝:指针赋值,使两个指针指向相同的一块内存空间,操作不安全。
2. Foundation类已经遵守了<NSCopying>和 <NSMutableCopying>协议,即实现了copy和mutableCopy方法,因此Foundation对象可以使用这些方法创建对象的副本或可变副本
@protocol NSCopying - (id)copyWithZone:(NSZone *)zone; @end @protocol NSMutableCopying - (id)mutableCopyWithZone:(NSZone *)zone; @end
3.用户自定义类遵守<NSCopying>协议和<NSMutableCopying>协议,则必须实现copyWithZone方法和mutableCopyWithZone方法,否则该类对象无法响应copy和mutableCopy消息
4.实现copyWithZone方法,例:
-(id)copyWithZone:(NSZone *)zone { Student *stu = [[Student allocWithZone:zone]initWithName:self.name Age:self.age]; return stu; }
对应main函数中:假设已经有一个Student对象stu1;
则:Student stu2 = [stu1 copy];
实现stu2是stu1的副本,这里是深复制,stu1和stu2分别对应不同内存。
5. 如果你的类产生了子类,那么copyWithZone:方法也将
被继承
Student *stu = [[Student allocWithZone: zone] init];
该方法应该改为: Student *stu = [[[self class] allocWithZone: zone]init];
如果编写一个类的copyWithZone:方法那么子类的方法应该先调用父类的copy方法以复制继承来的copy实例变量.
相关文章推荐
- Objective-C 深复制和浅复制与<NSCopying>协议
- <NSCopying>和 <NSMutableCopying>协议 深拷贝 浅拷贝
- Objective-C深复制和<NSCopying>协议
- 复制对象(二)<NSCopying>协议和属性的copy特性
- < NET > TCP 协议
- <再看TCP/IP第一卷>关于网络层及协议细节---IP协议(2)--移动IP及DHCP
- 复制对象(二)<NSCopying>协议和属性的copy特性
- 《learn objective-c on the Mac for OS X and IOS》<译名>《objective-C基础教程》
- <iOS>Objective-C常用的函数和常用的常量
- <转>MySql-两阶段加锁协议
- <a href="javascript:void(0)"> 伪协议
- 【ios】<NSCopying>协议
- <开发笔记>HLS协议下多源同时切片
- <<Effective Objective-C 2.0 编写高质量iOS与OS X代码的52个有效方法>>笔记-协议与分类
- <iOS读书笔记>之Objective-C高级编程(GCD)
- <input type="text"> and <html:text> 禁止复制
- 黑马——Objective-C学习笔记<十>:分类和协议
- Object-C中对自定义类实现<NSCopying>协议
- asp.net页面间传值的几种方法 表单提交 传送页面代码 复制代码 <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server
- <剑指offer>复杂链表的复制