博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NSString,NSMutableString, NSArray ,NSMutableArray,NSDictionary,NSMutableDictionary 深拷贝,浅拷贝分析...
阅读量:4659 次
发布时间:2019-06-09

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

NSString,NSMutableString, NSArray ,NSMutableArray,NSDictionary,NSMutableDictionary 深拷贝,浅拷贝。

首先我们得知道什么是深拷贝,什么事浅拷贝。

简单点说深拷贝就是拷贝内容,浅拷贝就是拷贝指针。

上面那些类我们可以这样理解他们的深、浅拷贝。只要上面那些类中的NSString,NSArray,NSDictionary这三个类的实例化对象是调用copy方法进行拷贝那么他们拷贝的就是一个指针,就是说他们只是拷贝了一个指向同一块内存地址的指针。其他的类调用mutableCopy是深拷贝.如果上面那些类的实例化对象调用的是mutableCopy方法,那么他们拷贝的就是整个内容。也就是说重新开辟一块内存来存储要拷贝的数据,而新的指针变量就是指向这块新的内存的地址。

上面那些类只是系统为我们写好了copy,mutableCopy方法。如果我们自己写的一个类需要实现copy,mutableCopy方法时,我们需要去遵守NSCopying 和 NSMutableCopying 协议。究竟我们想要的是深拷贝还是浅拷贝是根据我们要怎么实现的这两个协议里的方法。如果在- (id)copyWithZone:(NSZone *)zone这个方法里写的是返回一个新创建的对象的地址那就是深拷贝,如果只是返回是self的话就是浅拷贝。- (id)mutableCopyWithZone:(NSZone *)zone是NSMutableCopying 协议里方法。如果我们自己写的类是深拷贝还是浅拷贝同样意识根据方法里我们怎么去实现它。

转载于:https://www.cnblogs.com/yangpenghua/p/3776719.html

你可能感兴趣的文章
近段时间学习html和CSS的一些细碎总结
查看>>
第三章 栈和队列
查看>>
「Vue」v-html生成的图片大小无法调整的解决办法
查看>>
【BZOJ 4665】 4665: 小w的喜糖 (DP+容斥)
查看>>
Git 的 .gitignore 配置
查看>>
Language Integrated Query ----序
查看>>
【HDU】1542 Atlantis
查看>>
解决Android SDK Manager更新时出现问题
查看>>
Android Studio下“Error:Could not find com.android.tools.build:gradle:2.2.1”的解决方法
查看>>
第二章 第四节 添加SWT库
查看>>
docker file
查看>>
总结一些常见的国际标准化组织
查看>>
使用mybatis进行多条件的模糊查询的方式
查看>>
SqlServer 垂直分表
查看>>
BZOJ 1677: [Usaco2005 Jan]Sumsets 求和
查看>>
缓冲流
查看>>
DIV不用图片做可变可到处用的圆角
查看>>
luogu3899谈笑风生
查看>>
博客推荐
查看>>
MyBatis-Spring配置简单了解
查看>>