copy 的实现
来源:互联网 发布:linux mtd源代码分析 编辑:程序博客网 时间:2024/05/22 12:57
OC 的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操作。
本质:没有产生新对象。
常见的复制如下图:只有源对象和副本对象都不可变时,才是浅复制,其他都是深复制。
关于区分深复制与浅复制的一些详细代码如下:
/**
NSMutableString调用mutableCopy : 深复制
*/
void mutableStringMutableCopy()
{
NSMutableString *srcStr = [NSMutableString stringWithFormat:@”age is %d”, 10];
NSMutableString *copyStr = [srcStr mutableCopy];
[copyStr appendString:@”abc”];
NSLog(@”srcStr=%@, copyStr=%@”, srcStr, copyStr);
}
/**
NSMutableString调用copy : 深复制
*/
void mutableStringCopy()
{
NSMutableString *srcStr = [NSMutableString stringWithFormat:@”age is %d”, 10];
NSString *copyStr = [srcStr copy];[srcStr appendString:@"abc"];NSLog(@"srcStr=%p, copyStr=%p", srcStr, copyStr);
}
/**
NSString调用mutableCopy : 深复制
*/
void stringMutableCopy()
{
NSString *srcStr = [NSString stringWithFormat:@”age is %d”, 10];
NSMutableString *copyStr = [srcStr mutableCopy];[copyStr appendString:@"abc"];NSLog(@"srcStr=%@, copyStr=%@", srcStr, copyStr);
}
/**
NSString调用copy : 浅复制
*/
void stringCopy()
{
// copy : 产生的肯定是不可变副本
// 如果是不可变对象调用copy方法产出不可变副本,那么不会产生新的对象NSString *srcStr = [NSString stringWithFormat:@"age is %d", 10];NSString *copyStr = [srcStr copy];NSLog(@"%p %p", srcStr, copyStr);
}
- copy constructor的实现
- String copy的实现
- Copy的简单实现
- copy 的实现
- 无缓冲的copy实现
- 深度copy的实现方法
- Java----【实现copy的功能】
- iOS copy mutableCopy 的实现
- Excel 宏的自动 Copy实现方法
- 【转】实现copy文件功能的代码
- linux实现zero copy遇到的问题
- 1.文件IO----COPY的实现
- Objective-C实现copy的原理
- copy 的实现原理与深浅拷贝
- 实现深拷贝的类 Deep Copy
- RCU (Read-Copy Update) 的实现机制
- copy 的实现原理与深浅拷贝
- STL 简单 copy 算法的实现
- 额,先这样
- Ant生成文件结构
- 个人小 demo
- Volley网络请求框架简析——Android网络请求框架(三)
- 13款Linux运维比较实用的工具
- copy 的实现
- hdu 4901
- Object-C基础之初始化方法(init)
- java中单链表倒转的实现方法
- 通过Intent查看并获取联系人电话
- 产品经理系列视频教程价值1498
- Node.js 4.4.x 更新日志的重要内容回顾
- 产品经理系列视频教程价值1498
- Ant之项目应用