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开发中,Objective-C语言提供了@property关键字来声明属性,并且可以在属性声明时指定不同的内存管理行为,主要涉及到assign、retain和copy这三个关键字。为了深入理解这三者的区别,首先需要了解Objective-C的...
在Xcode中,可以将字体文件拖放到项目资源中,并确保选中"Copy items if needed"和"Add to targets"选项,以确保字体文件被正确地复制到应用的bundle中。 3. **注册TTF字体** 为了在应用中使用自定义字体,需要在...
总的来说,通过源码分析,我们可以更深入地理解深拷贝和浅拷贝的工作原理,以及如何在实践中正确应用它们。对于不可变对象,`copy`执行浅拷贝,`mutableCopy`执行深拷贝;对于可变对象,两者均执行深拷贝。了解并...
【iOS应用源码分析——基于Flight Control的克隆实践】 Flight Control是一款经典的飞行模拟游戏,玩家需要在屏幕上绘制航线,引导飞机安全降落。这个压缩包包含的“Flight Control Copy”是一个学习项目,旨在帮助...
2. **执行升级命令:** 在路由器上使用`copy tftp flash`命令将新版本的IOS文件从TFTP服务器复制到路由器的闪存中。例如:`Router# copy tftp flash`,并按提示输入TFTP服务器的地址和新IOS文件的名称。 完成上述...
通过分析和实践《Flight Control Copy》的源码,开发者可以加深对iOS游戏开发的理解,掌握关键技术和流程,为未来的项目打下坚实基础。同时,这个项目也是一个很好的学习资源,让初学者能够通过模仿实际项目来提升...
2. 添加SDK到项目:将下载的SDK解压后,将包含的 frameworks 文件夹拖入Xcode项目中,并确保已勾选“Copy items if needed”和“Create groups”。 3. 配置Info.plist:为了实现微博授权,需要在Info.plist文件中...
在iOS开发中,友盟(Umeng)是一个广泛使用的第三方统计分析平台,它为开发者提供了丰富的数据统计功能,包括页面浏览、用户行为、活跃度、留存率等关键指标。本"ios 友盟页面 统计demo"是针对如何集成并使用友盟SDK...
iOS开发中,理解Objective-C语言的特性如引用计数、内存管理、ARC(自动引用计数)是十分必要的。对于Swift语言,了解其编程语法、集合、应用生命周期、UI组件、并发编程、网络编程等也是构建应用的关键。 ...
- `copy flash:ios-image-file tftp`:将闪存中的IOS镜像文件通过TFTP复制到远程服务器。 **1.10 通过控制台口拷贝IOS镜像文件** - **场景**:在无法访问网络的情况下,通过控制台口手动上传IOS镜像。 - **步骤**...
- **内存管理**:iOS应用需手动管理对象生命周期,使用alloc/new/copy分配内存,dealloc释放内存,通过引用计数机制避免内存泄漏。 #### ArcGIS API for iOS开发实践 ArcGIS API for iOS的强大之处在于其实现了地图...
本练习作品——“山寨flight control flight control copy 2018128”,是针对知名游戏"Flight Control"的一个模仿项目,旨在帮助开发者掌握iOS应用的基本构建和游戏设计原理。通过分析这个源码,我们可以深入理解iOS...
"IOS应用源码Demo-练习作品:山寨Flight Control Flight Control Copy-毕设学习.zip" 这个标题表明,这是一个关于iOS应用程序的源代码示例,主要用于学习和实践。具体来说,它是对一款名为"Flight Control"游戏的...
这套API提供了丰富的功能,使开发者能够轻松地在iOS应用中集成地图服务、地理定位、空间分析等功能。 1. **ArcGIS – 完整的GIS解决方案:** - ArcGIS 是一套全面的地理信息系统解决方案,由Esri公司开发。该系统...
runtime如何支持这种设计模式,可以从源码中分析。 10. **KVO(Key-Value Observing)**:KVO允许观察对象的属性变化,runtime通过方法交换实现这一功能。 11. **Block和GCD**:runtime也涉及到了Block的内存管理...
**UIView** 是 iOS 中用于绘制视图的基类,提供了丰富的接口用于创建和管理用户界面元素。 1. **添加子视图**:`[self addSubview:view]`。 2. **移除子视图**:`[self removeSubview:view]`。 3. **布局调整**:`-...
确保“Copy items if needed”选项被选中,这样库文件会被复制到你的项目中。 2. **配置Podfile**: 如果你使用CocoaPods管理依赖,可以在Podfile中添加`pod 'IJKMediaFramework'`,然后执行`pod install`。不过,...
6. 一旦IOS文件成功下载,可以将其加载到故障路由器的Flash中,通过命令`copy tftp flash:`进行。 7. 重新启动路由器,路由器会尝试加载新复制的IOS,从而解决IOS损伤问题。 在进行这些操作时,需要注意确保路由器...