copy 有 copy 和mutableCopy
string 有 NSString NSMutableString
对应NSString 浅复制代码如下:
NSString *string = [NSString stringWithFormat:@"test"]; NSLog(@"复制前=%ld %p",[string retainCount],string); NSString *copyString = [string copy]; NSLog(@"复制后=%ld %p",[string retainCount],string); NSLog(@"复制的对象=%ld %p",[copyString retainCount],copyString);
测试结果如下
2015-07-30 11:02:26.875 09-test[643:303] 复制前=1 0x100108f30 2015-07-30 11:02:26.877 09-test[643:303] 复制后=2 0x100108f30 2015-07-30 11:02:26.878 09-test[643:303] 复制的对象=2 0x100108f30
对于NSString 深度复制代码如下
NSString *string = [NSString stringWithFormat:@"test"]; NSLog(@"深度复制前=%ld %p",[string retainCount],string); NSString *copyString = [string mutableCopy]; NSLog(@"深度复制后=%ld %p",[string retainCount],string); NSLog(@"深度复制的对象=%ld %p",[copyString retainCount],copyString);
测试结果如下:
2015-07-30 11:06:56.875 09-test[681:303] 深度复制前=1 0x1002026d0 2015-07-30 11:06:56.877 09-test[681:303] 深度复制后=1 0x1002026d0 2015-07-30 11:06:56.878 09-test[681:303] 深度复制的对象=1 0x100204400
对于NSMutableString 的浅复制
NSMutableString *string = [NSMutableString stringWithFormat:@"test"]; NSLog(@"复制前=%ld %p",[string retainCount],string); NSMutableString *copyString = [string copy]; NSLog(@"复制后=%ld %p",[string retainCount],string); NSLog(@"复制的对象=%ld %p",[copyString retainCount],copyString);
复制结果
2015-07-30 11:12:31.772 09-test[694:303] 复制前=1 0x100204340 2015-07-30 11:12:31.775 09-test[694:303] 复制后=1 0x100204340 2015-07-30 11:12:31.775 09-test[694:303] 复制的对象=1 0x1003017c0
对于NSMutableString 的深复制
NSMutableString *string = [NSMutableString stringWithFormat:@"test"]; NSLog(@"深度复制前=%ld %p",[string retainCount],string); NSString *copyString = [string mutableCopy]; NSLog(@"深度复制后=%ld %p",[string retainCount],string); NSLog(@"深度复制的对象=%ld %p",[copyString retainCount],copyString);
复制结果:
2015-07-30 11:15:06.882 09-test[706:303] 深度复制前=1 0x10010b1a0 2015-07-30 11:15:06.884 09-test[706:303] 深度复制后=1 0x10010b1a0 2015-07-30 11:15:06.885 09-test[706:303] 深度复制的对象=1 0x100401b70
总结如下:
对象 \操作 | copy | MutableCopy |
NSString | 地址相同 | 地址不同(复制后对象为NSMutableString) |
NSMutableString | 地址不同(复制后对象为NSString) | 地址不同 |
1.对于不可变String 浅复制(copy) 是复制地址,既然有两个对象引用地址 计数器自然要加1,地址相同
2.对于不可变String 深度复制(mutableCopy)是复制对象的内容;既然复制内容,原来的对象(被复制的对象)只提供内容,引用计数器是不用增加的,复制的对象是新的对象,地址为新地址
3.对于可变String 浅复制和深复制 我是这么理解的,由于其可变性 无论深浅拷贝,都会返回新对象给你
相关推荐
通过对不同类型的对象进行retain和copy进行深浅拷贝详细测试分析
在我们日常开发中,会出现许多复杂业务逻辑的bug。很难通过查看代码就能排查掉。尤其是偶现的bug,测试人员偶尔出现,自己调试死活出现不了。 所以,一般我们都会加上日志系统,在关键地方打印日志信息。可以选择...
ContextHub iOS框架 ... 如果您打算在分析中使用地理围栏或位置,则必须执行此操作。 注册应用 将#import 添加到您的AppDelegate。 - ( BOOL )application:(UIApplication *)application didFinish
本文实例为大家分享了iOS通过按钮添加和删除控件,供大家参考,具体内容如下 想要达到的效果如下: 先讲一下这个demo主要部分,即通过按钮实现增删图标 分析: 1、每一个图标需要两个数据,即图片和描述用的字符串 ,...
这里就先展示一个简单的水印图片下面就让我们一点点来分析分析需要了解什么先来看一个关系图,字写的丑,将就着看吧....看着上面的图,是有点凌乱的感觉,下面我们就一点点来剥开。代码实现根据需要实现的功能,我...
#PRODUCT_COPY_FILES += frameworks/native/data/etc/android.hardware.location.xml:system/etc/permissions/android.hardware.location.xml # evb logger PRODUCT_COPY_FILES += \ device/softwinner/astar-y3/...
typora-copy-images-toimages1. 快应用的介绍快应用是九大手机厂商基于硬件平台共同推出的新型应用生态。用户无需下载安装,即点即用,享受原生应用的性能体验1.1. 九大厂商他们分别是 小米、中兴、华为、金立、联想...
#PRODUCT_COPY_FILES += frameworks/native/data/etc/android.hardware.location.xml:system/etc/permissions/android.hardware.location.xml # evb logger PRODUCT_COPY_FILES += \ device/softwinner/astar-y3/...
#PRODUCT_COPY_FILES += frameworks/native/data/etc/android.hardware.location.xml:system/etc/permissions/android.hardware.location.xml # evb logger PRODUCT_COPY_FILES += \ device/softwinner/astar-y3/...
#PRODUCT_COPY_FILES += frameworks/native/data/etc/android.hardware.location.xml:system/etc/permissions/android.hardware.location.xml # evb logger PRODUCT_COPY_FILES += \ device/softwinner/astar-y3/...