黑马程序员-IOS-OC基础-浅析Copy语法
2014-04-20 23:38
417 查看
在OC语法中,提供了Copy语法(Copy + MutableCopy)用于对象的拷贝。其中很容易混淆的是浅拷贝和深拷贝。
所谓浅拷贝,即是地址拷贝,并不产生新的对象,而是对原对象的引用计数值加1。而深拷贝,即是对象拷贝,产生新的对象副本,计数器为1。
下面通过一个例子来分析一下这个比较容易乱的Copy:
一、对于NSString/NSMutableString; NSArray/NSMutableArray... 这OC提供的类对象:
以NSString/NSMutableString为例:
对于copy,返回的一定是不可变类型;而mutableCopy,返回的一定是可变类型。
①对于 mutableCopy ,一定是深拷贝。
②对于
copy:
如果是 NSString ---> NSString;则是浅拷贝;如果是 NSMutableString ---> NSString;则是 深拷贝。
如果是 NSString 、NSMutableString ---> NSMutableString;则是深拷贝。
注:只有一种情况下是发生浅拷贝:不可变对象 复制到 不可变对象。
?
除了以上这种情形外,其他都是深拷贝。
例如:
?
二、对于自定义对象的Copy:该类必须实现NSCopying协议,重写 copyWithZone 方法。
同理,对于自定义对象的mutableCopy:必须实现 NSMutableCopying 协议,重写 mutableCopyWithZone 方法。
在NSCopying协议中,其实只有一个协议方法:
?
在NSMutableCopying协议:
?
下面给出一个例子:
?
?
?
加入对于某些自定义对象是不可变的,那么如何办呢?
?
这样,输出的两个对象的地址就是相同的了。
下面了解一下关于如果某一个自定义类继承了 这个Person类的情况。
如果某一个子类继承了实现了NSCopying协议的基类,那么该子类也是会自动继承这个协议的方法。但是需要自己重新实现。
例如:有一个Student子类继承了这个Person类:
?
?
注意其中copyWithZone方法的实现。
所谓浅拷贝,即是地址拷贝,并不产生新的对象,而是对原对象的引用计数值加1。而深拷贝,即是对象拷贝,产生新的对象副本,计数器为1。
下面通过一个例子来分析一下这个比较容易乱的Copy:
一、对于NSString/NSMutableString; NSArray/NSMutableArray... 这OC提供的类对象:
以NSString/NSMutableString为例:
对于copy,返回的一定是不可变类型;而mutableCopy,返回的一定是可变类型。
①对于 mutableCopy ,一定是深拷贝。
②对于
copy:
如果是 NSString ---> NSString;则是浅拷贝;如果是 NSMutableString ---> NSString;则是 深拷贝。
如果是 NSString 、NSMutableString ---> NSMutableString;则是深拷贝。
注:只有一种情况下是发生浅拷贝:不可变对象 复制到 不可变对象。
?
例如:
?
同理,对于自定义对象的mutableCopy:必须实现 NSMutableCopying 协议,重写 mutableCopyWithZone 方法。
在NSCopying协议中,其实只有一个协议方法:
?
?
?
?
下面了解一下关于如果某一个自定义类继承了 这个Person类的情况。
如果某一个子类继承了实现了NSCopying协议的基类,那么该子类也是会自动继承这个协议的方法。但是需要自己重新实现。
例如:有一个Student子类继承了这个Person类:
?
相关文章推荐
- 黑马程序员-IOS-OC基础-面向对象语法三
- 黑马程序员-IOS学习笔记-OC基础OC简介及基本语法
- 黑马程序员--ios基础--oc--面向对象--核心语法
- 黑马程序员——ios开发基础之OC中Foundation框架(二)、copy以及单例
- 黑马程序员-IOS-OC基础-面向对象语法二
- 黑马程序员-IOS-OC基础-OC简介及基本语法
- 黑马程序员_ios基础总结9_OC特有语法
- 黑马程序员-iOS基础-Objective-C基础(四)OC开发技巧及核心语法(上)
- 黑马程序员——零基础学习iOS开发——10 Object-C 面向对象思想、OC语法简介、对象、类、
- 黑马程序员-IOS-OC基础-面向对象语法一
- (IOS系列)——OC基础语法:Copy
- 黑马程序员-IOS-OC基础-OC特有语法
- 黑马程序员-iOS基础之OC重点语法(Block、Protocol)
- 黑马程序员-IOS-OC基础-OC简介及基本语法
- 黑马程序员---iOS基础----OC中的点语法、构造方法
- 黑马程序员——IOS基础之OC---类使用的常见错误汇总
- 黑马程序员——IOS基础---Objective-C第一节课---最简单的OC程序
- 黑马程序员--IOS基础第十八天(OC)
- 黑马程序员---IOS基础---OC 中无参与有参方法声明实现及调用
- 黑马程序员_iOS开发C语言基础基本语法易错点