OC中的copy

原创 2015年07月10日 13:42:02
•OC中的copy
作用:利用一个源对象产生一个副本对象
特点:
修改源对象的属性和行为,不会影响副本对象

修改副本对象的属性和行为,不会影响源对象


•如何使用copy功能
Ø一个对象可以调用copy或mutableCopy方法来创建一个副本对象
ucopy : 创建的是不可变副本(如NSStringNSArrayNSDictionary)
umutableCopy:创建的是可变副本(如NSMutableStringNSMutableArrayNSMutableDictionary)
•使用copy功能的前提
Øcopy: 需要遵守NSCopying协议,实现copyWithZone:方法

@protocol NSCopying

- (id)copyWithZone:(NSZone*)zone;

@end

ØmutableCopy: 需要遵守NSMutableCopying协议,实现mutableCopyWithZone:方法

@protocol NSMutableCopying

-(id)mutableCopyWithZone:(NSZone *)zone;

@end 


•深复制(深拷贝,内容拷贝,deep copy)
Ø源对象和副本对象是不同的两个对象
Ø源对象引用计数器不变,副本对象计数器为1(因为是新产生的)
Ø本质是:产生了新的对象
Ø
•浅复制(浅拷贝,指针拷贝,shallow copy)
Ø源对象和副本对象是同一个对象
Ø源对象(副本对象)引用计数器+ 1,相当于做一次retain操作
本质是:没有产生新的对象


NSArray

NSMutableArray

copy

NSArray

mutableCopy

NSMutableArray


NSDictionary

NSMutableDictionary

copy

NSDictionary

mutableCopy

NSMutableDictionary

NSString

NSMutableString

copy

NSString

mutableCopy

NSMutableString


只有源对象和副本对象都不可变时,才是浅复制,其它都是深复制

关于OC中Copy和retain的心得

关于oc中的 @property中的retain和Copy的运用, 首先先看一下OC中的关于 * &之间的关系         NSString * str=@"123";         NS...
  • PassionWilliam
  • PassionWilliam
  • 2015年09月15日 13:05
  • 980

OC——copy语法的基本使用

Copy语法 Oc中的Copy和mutableCopy方法:   Copy-需要先实现NSCopying协议,创建的是不可变的副本(如NSString、NSArray、NSDictionary)。...
  • yuwuchaio
  • yuwuchaio
  • 2014年07月27日 21:45
  • 431

OC自定义对象的copy

一、概念 1、copy的目的在于修改源对象或者副本的时候互不影响 2、只有在不可变对象copy的时候才是浅拷贝,其余都是深拷贝 二、自定义对象的copy(必须首先遵守NSCopying协议) ...
  • bjwltiankong
  • bjwltiankong
  • 2014年11月23日 08:37
  • 406

OC中的关键字,weak,assign,copy,strong,nonatomic,retain

1:我们先看下weak和assign的区别;       答:首先weak的作用是声明为weak的指针,指针指向的地址一旦被释放,这些指针都将被赋值为nil。这样的好处能有效的防止野指针。在c/c+...
  • qq_33998367
  • qq_33998367
  • 2016年02月19日 16:37
  • 356

OC中assign、copy 、retain等关键字的含义

assign: 简单赋值,不更改索引计数 copy: 建立一个索引计数为1的对象,然后释放旧对象 retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1 Copy...
  • Damon_hoo
  • Damon_hoo
  • 2014年09月04日 17:43
  • 1171

OC中的字符串属性(深拷贝和浅拷贝)

我们在项目中定义一个字符串属性的时候,有时候见到别人用retain,有时候见到用copy。那么到底这两种用法有什么区别呢? 这就需要我们了解深拷贝和浅拷贝和区别了。 其实copy是创建一个新对象,...
  • qq_29892943
  • qq_29892943
  • 2016年03月05日 14:08
  • 755

OC当中的深拷贝和浅拷贝

深拷贝和浅拷贝是一个经常问到的问题。 很多人认为copy是浅拷贝,mutableCopy是深拷贝。在解释copy与mutableCopy的区别,我们先搞清楚什么是深拷贝和浅拷贝 从...
  • maciostang
  • maciostang
  • 2017年02月08日 11:20
  • 466

OC-内存管理:retain/copy(深、浅拷贝)的使用和区别详解

通过程序来说明OC中的:深拷贝(deep copy)、浅拷贝、retain的使用及它们之间的区别。...
  • u012360598
  • u012360598
  • 2014年11月16日 17:27
  • 1680

OC学习篇之---对象的拷贝

在前一篇文章中我们说到了如何解决对象的循环引用问题:http://blog.csdn.net/jiangwei0910410003/article/details/41926369,这一篇文章我们就来...
  • jiangwei0910410003
  • jiangwei0910410003
  • 2014年12月14日 18:02
  • 11631

NSArray应该用strong修饰还是copy修饰

我们使用NSMutableArray的时候用strong进行修饰 但是网上很多大牛建议我们使用copy来进行修饰,对于修饰NSArray, copy和strong之间到底有什么区别呢? 下面我们...
  • zhoupengju
  • zhoupengju
  • 2016年10月12日 11:56
  • 1419
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OC中的copy
举报原因:
原因补充:

(最多只允许输入30个字)