iOS开发怎么使用copy关键字
2016-01-07 14:27
225 查看
使用场景;
(1)、NSString、NSArray、NSDictionary等经常使用copy关键字
原因:因为父类指针可以指向子类对象,使用copy的目的是为了让本对象的属性不受外界影响,使用copy无论给我传入是一个可变对象还是不可对象, 我本身持有的就是一个不可变的副本.,如果我们使用是strong,那么这个属性就有可能指向一个可变对象,如果这个可变对象在外部被修改了,那
么会影响该属性.
//User.h文件中
@property (nonatomic,
strong)NSString *name;此时若将一个可变字符串set给name,那么此时的name则指向的是一个可变字符
那么就无法保证name的不可变性
@property (nonatomic,
copy)NSString *name;此时若将一个可变字符串set给name,此时会执行[MutableString
copy]内容复 制,即深复制,将返回一个不可变字符串,即name指向的是一个不可变字符串,以后即使MutableString改变也不会影响name的值
例如:
(2)、block也经常使用copy关键字
原因:block使用copy是从MRC遗留下来的“传统”,在MRC中,方法内部的block是在栈区的,使用copy可以把它放到堆区.在ARC中写不写都行:对于
block使用copy还是strong效果是一样的,但写上copy也无伤大雅,还能时刻提醒我们:编译器自动对block进行了copy操作
需要注意:
NSMutableString、NSMutableArray、NSMutableDictionary,使用copy应注意
原因:1、添加,删除,修改数组内的元素的时候,程序会因为找不到对应的方法而崩溃.因为copy就是复制一个不可变NSArray的对象;
2、使用了atomic属性会严重影响性能。
在非集合类对象中:对immutable对象进行copy操作,是指针复制,mutableCopy操作时内容复制;对mutable对象进行copy和mutableCopy都是 内容复制。用代码简单表示如下:
[immutableObject copy] // 浅复制
[immutableObject mutableCopy] //深复制
[mutableObject copy] //深复制
[mutableObject mutableCopy] //深复制
(1)、NSString、NSArray、NSDictionary等经常使用copy关键字
原因:因为父类指针可以指向子类对象,使用copy的目的是为了让本对象的属性不受外界影响,使用copy无论给我传入是一个可变对象还是不可对象, 我本身持有的就是一个不可变的副本.,如果我们使用是strong,那么这个属性就有可能指向一个可变对象,如果这个可变对象在外部被修改了,那
么会影响该属性.
//User.h文件中
@property (nonatomic,
strong)NSString *name;此时若将一个可变字符串set给name,那么此时的name则指向的是一个可变字符
那么就无法保证name的不可变性
@property (nonatomic,
copy)NSString *name;此时若将一个可变字符串set给name,此时会执行[MutableString
copy]内容复 制,即深复制,将返回一个不可变字符串,即name指向的是一个不可变字符串,以后即使MutableString改变也不会影响name的值
例如:
(2)、block也经常使用copy关键字
原因:block使用copy是从MRC遗留下来的“传统”,在MRC中,方法内部的block是在栈区的,使用copy可以把它放到堆区.在ARC中写不写都行:对于
block使用copy还是strong效果是一样的,但写上copy也无伤大雅,还能时刻提醒我们:编译器自动对block进行了copy操作
需要注意:
NSMutableString、NSMutableArray、NSMutableDictionary,使用copy应注意
原因:1、添加,删除,修改数组内的元素的时候,程序会因为找不到对应的方法而崩溃.因为copy就是复制一个不可变NSArray的对象;
2、使用了atomic属性会严重影响性能。
在非集合类对象中:对immutable对象进行copy操作,是指针复制,mutableCopy操作时内容复制;对mutable对象进行copy和mutableCopy都是 内容复制。用代码简单表示如下:
[immutableObject copy] // 浅复制
[immutableObject mutableCopy] //深复制
[mutableObject copy] //深复制
[mutableObject mutableCopy] //深复制
相关文章推荐
- NSScanner类的基本用法
- iOS学习笔记55- iOS项目集成ShareSDK实现第三方登录、分享、关注等功能。
- ios 关于时间的处理
- iOS 跑马灯 一句话集成
- enum和enum typedef 在IOS中的使用
- iOS 大头针 MKAnnotationView 自定义
- iOS 9音频应用播放音频之iOS 9音频播放进度
- IOS友盟错误分析
- iOS 9音频应用播放音频之iOS 9音频播放进度
- iOS 扩展机制category与associative
- 设置tabBarItem图片渲染
- ios中使用自己添加的字体
- IOS 有导航栏的时候,坐标从(0,64)变成从(0,0)开始
- AVCaptureDevice iOS摄像头属性
- iOS开发中,怎么打包为ipa格式的软件包以及怎么安装到手机终端上
- iOS上传多张图片
- iOS Newbie - Xcode 7 & iOS 9 Navigation Bar & Status Bar
- Masonry教程--IOS自适配
- iOS强弱引用宏
- 欢迎使用CSDN-markdown编辑器