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


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

相关文章推荐

黑马程序员-IOS-OC基础-浅析Copy语法

在OC语法中,提供了Copy语法(Copy + MutableCopy)用于对象的拷贝。其中很容易混淆的是浅拷贝和深拷贝。 所谓浅拷贝,即是地址拷贝,并不产生新的对象,而是对原对象的引用计数值加...

OC关键字copy与mutableCopy

OC关键字Copy与MutableCopy原理,如何在自定义类中使用与重写。

20150619_OC之copy与mutableCopy

// // main.m // IOS150619_ObjectiveC_CopyAndMutableCopy // // Created by qianfeng on 15/6/19. // ...

黑马程序员——ios开发基础之OC中Foundation框架(二)、copy以及单例

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 第一讲 Foundation框架(二) 1、NSFileManager介绍和用法        ...

OC中的copy

一、什么是copy 1、copy的目的: 对原来对象创建一个副本,使得源对象和副本之间彼此修改互不影响。 2、copy的几种情况:(==>表示 “拷贝到”) 可变对象==>可变对象: 可变对象...

详谈OC(object-c)深浅复制/拷贝-什么情况下用retain和copy

读前小提示:对于深浅复制有一个清楚的了解,对于学习oc的朋友来说,至关重要。那么首先,我们要明白深浅复制是如何定义的呢。这里为了便于朋友们理解,定义如下。   浅 复 制:在复制操作时,对于...

关于oc的学习笔记 -copy和mutableCopy

简单点来说的话copy就是复制一个不可以变的类型,mutableCopy复制一个可变的对象 举例子 NSString *str = @"fikk"; NSMutableS...

黑马程序员---OC基础补充---补充:copy与mutableCopy、单例模式

黑马程序员---OC基础补充---补充:copy与mutableCopy、单例模式

Object-c学习之路十二(OC的copy)

oc中的拷贝分为:copy(浅拷贝)和mutablecopy(深拷贝)。 浅拷贝也为指针拷贝,拷贝后原来的对象计数器会+1; 深拷贝为对象拷贝,原来的对象计数器不变。 注意:自定义对象拷贝时要实...

OC中内存管理 assign, retain, copy 的 setter 和 getter 方法

最近关于 setter 和 getter 方法突然有些晕, 所以重新做了整理 内存管理 assign, retain, copy 的 setter 和 getter 方法assign的 setter ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OC中的copy
举报原因:
原因补充:

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