`
hufeng
  • 浏览: 104447 次
  • 性别: Icon_minigender_1
  • 来自: 江西
社区版块
存档分类
最新评论

IOS 中copy 分析

    博客分类:
  • IOS
阅读更多

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 浅复制和深复制 我是这么理解的,由于其可变性 无论深浅拷贝,都会返回新对象给你

 

分享到:
评论

相关推荐

    ios_assign,retain和copy详解

    在iOS开发中,Objective-C语言提供了@property关键字来声明属性,并且可以在属性声明时指定不同的内存管理行为,主要涉及到assign、retain和copy这三个关键字。为了深入理解这三者的区别,首先需要了解Objective-C的...

    IOS应用源码之【框架】iOS中显示任何TTF字体.rar

    在Xcode中,可以将字体文件拖放到项目资源中,并确保选中"Copy items if needed"和"Add to targets"选项,以确保字体文件被正确地复制到应用的bundle中。 3. **注册TTF字体** 为了在应用中使用自定义字体,需要在...

    通过源码分析iOS中的深拷贝与浅拷贝

    总的来说,通过源码分析,我们可以更深入地理解深拷贝和浅拷贝的工作原理,以及如何在实践中正确应用它们。对于不可变对象,`copy`执行浅拷贝,`mutableCopy`执行深拷贝;对于可变对象,两者均执行深拷贝。了解并...

    IOS应用源码——练习作品:山寨Flight Control Flight Control Copy.zip

    【iOS应用源码分析——基于Flight Control的克隆实践】 Flight Control是一款经典的飞行模拟游戏,玩家需要在屏幕上绘制航线,引导飞机安全降落。这个压缩包包含的“Flight Control Copy”是一个学习项目,旨在帮助...

    CISCO2811路由器IOS升级及配置

    2. **执行升级命令:** 在路由器上使用`copy tftp flash`命令将新版本的IOS文件从TFTP服务器复制到路由器的闪存中。例如:`Router# copy tftp flash`,并按提示输入TFTP服务器的地址和新IOS文件的名称。 完成上述...

    山寨Flight Control Flight Control Copy_ios源码

    通过分析和实践《Flight Control Copy》的源码,开发者可以加深对iOS游戏开发的理解,掌握关键技术和流程,为未来的项目打下坚实基础。同时,这个项目也是一个很好的学习资源,让初学者能够通过模仿实际项目来提升...

    新浪微博在iOS中的应用

    2. 添加SDK到项目:将下载的SDK解压后,将包含的 frameworks 文件夹拖入Xcode项目中,并确保已勾选“Copy items if needed”和“Create groups”。 3. 配置Info.plist:为了实现微博授权,需要在Info.plist文件中...

    ios 友盟页面 统计demo

    在iOS开发中,友盟(Umeng)是一个广泛使用的第三方统计分析平台,它为开发者提供了丰富的数据统计功能,包括页面浏览、用户行为、活跃度、留存率等关键指标。本"ios 友盟页面 统计demo"是针对如何集成并使用友盟SDK...

    iOS 开发知识树

    iOS开发中,理解Objective-C语言的特性如引用计数、内存管理、ARC(自动引用计数)是十分必要的。对于Swift语言,了解其编程语法、集合、应用生命周期、UI组件、并发编程、网络编程等也是构建应用的关键。 ...

    CISCO-IOS中文命令手册

    - `copy flash:ios-image-file tftp`:将闪存中的IOS镜像文件通过TFTP复制到远程服务器。 **1.10 通过控制台口拷贝IOS镜像文件** - **场景**:在无法访问网络的情况下,通过控制台口手动上传IOS镜像。 - **步骤**...

    ArcGIS API for iOS进阶教程课件

    - **内存管理**:iOS应用需手动管理对象生命周期,使用alloc/new/copy分配内存,dealloc释放内存,通过引用计数机制避免内存泄漏。 #### ArcGIS API for iOS开发实践 ArcGIS API for iOS的强大之处在于其实现了地图...

    ios应用源码之练习作品:山寨flight control flight control copy 2018128

    本练习作品——“山寨flight control flight control copy 2018128”,是针对知名游戏"Flight Control"的一个模仿项目,旨在帮助开发者掌握iOS应用的基本构建和游戏设计原理。通过分析这个源码,我们可以深入理解iOS...

    IOS应用源码Demo-练习作品:山寨Flight Control Flight Control Copy-毕设学习.zip

    "IOS应用源码Demo-练习作品:山寨Flight Control Flight Control Copy-毕设学习.zip" 这个标题表明,这是一个关于iOS应用程序的源代码示例,主要用于学习和实践。具体来说,它是对一款名为"Flight Control"游戏的...

    ArcGIS API for iOS进阶

    这套API提供了丰富的功能,使开发者能够轻松地在iOS应用中集成地图服务、地理定位、空间分析等功能。 1. **ArcGIS – 完整的GIS解决方案:** - ArcGIS 是一套全面的地理信息系统解决方案,由Esri公司开发。该系统...

    iOS runtime底层框架原码

    runtime如何支持这种设计模式,可以从源码中分析。 10. **KVO(Key-Value Observing)**:KVO允许观察对象的属性变化,runtime通过方法交换实现这一功能。 11. **Block和GCD**:runtime也涉及到了Block的内存管理...

    2018iOS一份高级面试题

    **UIView** 是 iOS 中用于绘制视图的基类,提供了丰富的接口用于创建和管理用户界面元素。 1. **添加子视图**:`[self addSubview:view]`。 2. **移除子视图**:`[self removeSubview:view]`。 3. **布局调整**:`-...

    ios 直播集成好的IJKMediaFramework.framework(0.8.8版本)

    确保“Copy items if needed”选项被选中,这样库文件会被复制到你的项目中。 2. **配置Podfile**: 如果你使用CocoaPods管理依赖,可以在Podfile中添加`pod 'IJKMediaFramework'`,然后执行`pod install`。不过,...

    Cisco3640路由器IOS损伤故障和修复方法.pdf

    6. 一旦IOS文件成功下载,可以将其加载到故障路由器的Flash中,通过命令`copy tftp flash:`进行。 7. 重新启动路由器,路由器会尝试加载新复制的IOS,从而解决IOS损伤问题。 在进行这些操作时,需要注意确保路由器...

Global site tag (gtag.js) - Google Analytics