博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ios copy
阅读量:4954 次
发布时间:2019-06-12

本文共 1200 字,大约阅读时间需要 4 分钟。

浅拷贝:一个强指针,一个弱指针同时指向一个空间,强引用的对象释放后,弱引用跟着指向空指针

引用计数拷贝:避免了浅拷贝和深拷贝的缺点,被大量使用

两个强指针指向同一空间

以上两者是共用同一块空间,优点,节省存储空间

深拷贝:

最大的特点:两个指针各自有自己的存储空间
优点:两个指针互不干扰
缺点:耗费的存储空间大

1. 浅拷贝:

2个指针同时指向一空间,一个释放了,另一个也被迫释放(强引用+弱引用),节省存储空间(强引用的空间释放了弱引用指针则为空)

TRStudent *s1 = [[TRStudent alloc]init];__weak TRStudent *s2 = s1 ;
2. 引用计数的拷贝:

2个指针同时指向一空间,一个释放了,另一个不被迫释放(强引用+强引用)

TRStudent *s1 = [[TRStudent alloc]init];TRStudent *s2 = s1 ;

以上为同一存储空间

深拷贝:2个不同的存储空间 (面试题)

int p1 = (int)malloc(4);
p1 = 10;
int
p2 = (int )malloc(4);
p2 *p1;

3. 深拷贝:

NSCopyiny协议:

1 自定义类实现深拷贝时,需要采纳 NSCopying 协议
2 在自定义的.m文件中实现NSCopying协议中的方法 copyWithZone
3 在主函数中,用copy方法实现深拷贝,该方法在函数体中,会自动调用copyWithZone方法
4 copy可以作为property的参数,使属性赋值时得到的是副本(深拷贝)

三部曲:

采纳
, 实现函数体(重写), 调用[b1 copy]得到副本// 1.在.h文件中采纳
:@interface TRStudent : NSObject
// 2.实现函数体(重写)与工厂方法很像;不用放入__autirelaesingalloc不同 ->allocWithZone带参初始化用self.xxx-(id)copyWithZone:(NSZone *)zone{ TRCicle *c = [[TRCicle allocWithZone:zone]initWithRadius:self.radius andOrgin:self.center]; return c;}-(id)copy{….id obj = [self copyWithZone]; //方法调用…return obj;}// 3.调用[b1 copy]得到副本:TRCicle *c2 = [c1 copy];

转载于:https://www.cnblogs.com/xulinmei/p/7420108.html

你可能感兴趣的文章
deque
查看>>
Ext JS学习第十三天 Ext基础之 Ext.Element
查看>>
Setting up a Passive FTP Server in Windows Azure VM(ReplyCode: 227, Entering Passive Mode )
查看>>
Atitit mtp ptp rndis midi协议的不同区别
查看>>
Ajax辅助方法
查看>>
Python模块调用
查看>>
委托的调用
查看>>
c#中从string数组转换到int数组
查看>>
Scrapy入门程序点评
查看>>
DotNetty网络通信框架学习之源码分析
查看>>
8.1 Android Basic 数据存储 Preferences Structured(分组的Preferences)
查看>>
原因和证明
查看>>
VC6.0图像处理2--图像的反色
查看>>
Snoop, 对WPF程序有效的SPY++机制
查看>>
JAVA程序猿怎么才干高速查找到学习资料?
查看>>
使用axel下载百度云文件
查看>>
Qt中图像的显示与基本操作
查看>>
详解软件工程之软件测试
查看>>
WCF(二) 使用配置文件实现WCF应用程序
查看>>
【CodeForces 803 C】Maximal GCD(GCD+思维)
查看>>