OC中copy的使用
2015-07-30 14:25
351 查看
首先,什么是copy?
Copy的字面意思是“复制”、“拷贝”,是一个产生副本的过程。
常见的复制有:文件复制,作用是利用一个源文件产生一个副本文件。
特点:1、修改源文件的内容,不会影响副本文件;
2、修改副本文件的内容,不会影响源文件。
OC中copy的作用是:利用一个源对象产生一个副本对象
特点:1、修改源对象的属性和行为,不会影响副本对象;
2、修改副本对象的属性和行为,不会影响源对象。
如何使用copy功能?
一个对象可以调用copy或mutableCopy方法来创建一个副本对象。
1、copy:创建的时不可变副本(如NSString、NSArray、NSDictionary)。
2、mutableCopy:创建的可变副本(如NSMutableString、NSMutableArray、NSMutableDictionary)。
使用copy功能的前提:
1、copy:需要遵守NSCopying协议,实现copyWithZone:方法。
@protocol NSCopying
- (id)copyWithZone:(NSZone *)zone;
@end
2、mutableCopy : 需要遵守NSMutableCopying协议,实现mutableCopyWithZone:方法
@protocol NSMutableCopying
- (id)mutableCopyWithZone:(NSZone *)zone;
@end
深复制和浅复制的区别:
深复制(深拷贝、内容拷贝、deep copy):
特点:1、源对象和副本对象是不同的两个对象;
2、源对象引用计数器不变,副本对象计数器为1(因为是新产生的)。
本质:产生了新对象。
浅复制(浅拷贝、指针拷贝、shallow copy):
特点:1、源对象和副本对象是同一对象;
2、源对象(副本对象)引用计数器+1,相当于做一次retain操作。
本质:没有产生新对象。
常见的复制如下图:
只有源对象和副本对象都不可变时,才是浅复制,其他都是深复制。
关于区分深复制与浅复制的一些详细代码如下:
?
@property内存管理策略的选择
1.非ARC
1> copy : 只用于NSString\block;
2> retain : 除NSString\block以外的OC对象;
3>
assign : 基本数据类型、枚举、结构体(非OC对象),当2个对象相互引用,一端用retain,一端
用assign。
2.ARC
1> copy : 只用于NSString\block;
2> strong : 除NSString\block以外的OC对象;
3> weak : 当2个对象相互引用,一端用strong,一端用weak;
4>
assgin : 基本数据类型、枚举、结构体(非OC对象)。
Copy的字面意思是“复制”、“拷贝”,是一个产生副本的过程。
常见的复制有:文件复制,作用是利用一个源文件产生一个副本文件。
特点:1、修改源文件的内容,不会影响副本文件;
2、修改副本文件的内容,不会影响源文件。
OC中copy的作用是:利用一个源对象产生一个副本对象
特点:1、修改源对象的属性和行为,不会影响副本对象;
2、修改副本对象的属性和行为,不会影响源对象。
如何使用copy功能?
一个对象可以调用copy或mutableCopy方法来创建一个副本对象。
1、copy:创建的时不可变副本(如NSString、NSArray、NSDictionary)。
2、mutableCopy:创建的可变副本(如NSMutableString、NSMutableArray、NSMutableDictionary)。
使用copy功能的前提:
1、copy:需要遵守NSCopying协议,实现copyWithZone:方法。
@protocol NSCopying
- (id)copyWithZone:(NSZone *)zone;
@end
2、mutableCopy : 需要遵守NSMutableCopying协议,实现mutableCopyWithZone:方法
@protocol NSMutableCopying
- (id)mutableCopyWithZone:(NSZone *)zone;
@end
深复制和浅复制的区别:
深复制(深拷贝、内容拷贝、deep copy):
特点:1、源对象和副本对象是不同的两个对象;
2、源对象引用计数器不变,副本对象计数器为1(因为是新产生的)。
本质:产生了新对象。
浅复制(浅拷贝、指针拷贝、shallow copy):
特点:1、源对象和副本对象是同一对象;
2、源对象(副本对象)引用计数器+1,相当于做一次retain操作。
本质:没有产生新对象。
常见的复制如下图:
只有源对象和副本对象都不可变时,才是浅复制,其他都是深复制。
关于区分深复制与浅复制的一些详细代码如下:
?
1.非ARC
1> copy : 只用于NSString\block;
2> retain : 除NSString\block以外的OC对象;
3>
assign : 基本数据类型、枚举、结构体(非OC对象),当2个对象相互引用,一端用retain,一端
用assign。
2.ARC
1> copy : 只用于NSString\block;
2> strong : 除NSString\block以外的OC对象;
3> weak : 当2个对象相互引用,一端用strong,一端用weak;
4>
assgin : 基本数据类型、枚举、结构体(非OC对象)。
相关文章推荐
- 批处理中Copy与Xcopy命令的区别小结
- dos 文件复制 copy命令
- 谈谈xcopy中的排除copy
- php使用COPY函数更新配置文件的方法
- copy 将一个或多个文件从一个位置复制到其他位置
- cmd copy命令 文件复制
- 浅谈Python中copy()方法的使用
- Python中使用copy模块实现列表(list)拷贝
- 简单的copy程序
- 从源文件中读出最后10KB内容到目的文件中
- 负载均衡及会话保存(Ofbiz框架)
- JAVA Zero Copy的相关知识
- cp命令
- (转)讲一下retain/copy/assign的含义
- 检查内存技巧
- Linux系统Qmail邮件服务器安装过程解析
- ios数据存储4种
- copy与retain nonatomic和atomic
- Java 实现文件夹copy与delete
- Java 将String写到指定的文件内