copy
来源:互联网 发布:黄冈名师软件下载 编辑:程序博客网 时间:2024/09/21 08:57
今天遇到一个实际操作。终于把这个copy了解得更加透彻了(用得太少咯)
自定义了一个LBObject类,这样用:
_weakObjectC = [[LBObject alloc] init]; _weakObjectC.name = @"luxiangting"; _weakObjectD = [_weakObjectC copy];
编译器马上罢工了。告诉你不能这样做。因为找不到方法,这个好搞,马上遵守协议,并且实现方法:
#pragma mark - LBObject@interface LBObject : NSObject <NSCopying , NSMutableCopying>@property (nonatomic, strong) NSString *name;@property (nonatomic, assign) NSInteger age;@end
然后这样搞一搞,无痛无伤,爽歪歪
#pragma mark - LBObject@implementation LBObject- (id)copyWithZone:(NSZone *)zone{ LBObject *object = [[[self class] allocWithZone:zone] init]; object.name = [_name copy]; object.age = _age; return object;}- (id)mutableCopyWithZone:(NSZone *)zone{ LBObject *object = [[[self class] allocWithZone:zone] init]; object.name = [_name mutableCopy]; object.age = _age; return object;}@end
然后发现一个很好的问题,mutableArray踩坑,且看:
https://segmentfault.com/q/1010000004359262?_ea=606650
http://stackoverflow.com/questions/14856681/why-does-a-copy-nonatomic-nsmutablearray-property-create-nsarrays
从这里学到的几点,太重要!
属性变量说白了就是编译器帮你自动生成get set点语法
所以一切属性的点语法赋值可以是变相set方法,例如:
self.words = mutWords;其实就是:
[self setWords:mutWords];
这个时候就需要qualifier修饰词来修饰内存的设置了,例如如果你设置成copy:
其实就是将set方法重写为:
- (void)setWords:(NSMutableArray *)newWords{ _words = [newWords copy];}
也许你就明白了strong的作用了,strong相当于MRC的retain,就是直接的引用计数的增一
回到上面,如果在copy的修饰下,还是self.words = mutWords;这样
其实就是:
self.words = [mutWords copy]; // 代入set方法嘛
如果对mutableArray进行copy操作,完蛋了,生成一个不可变的NSArray对象,坑就来啦!
这样去理解这四个修饰词:copy retain weak strong 就会明白很多很多!
0 0
- copy
- copy
- copy
- copy.
- copy
- copy
- copy
- copy
- copy
- copy
- Copy
- copy
- copy
- copy
- copy
- copy
- copy
- Copy
- Android 发布自己的library到Jcenter
- mysql group_concat函数被截断的问题
- 【案例】RAID卡写策略改变引发的问题
- 利用OpenCV的库函数Sobel和Scharr作图像的边缘检测
- C语言sizeof实例解析
- copy
- linux inode解释
- Dijkstra——Java实现
- poj1094Sorting It All Out(拓扑排序)
- 网络工程师,路由器4种模式详解:AP,Router,Repeater,Bridger (接入点,无线路由,中继,桥接)
- 理解windows消息机制-delphi消息机制学习笔记。
- 他山之石之动态加载碎片的最佳写法以及ViewPager关联按钮
- AndroidStudio导入项目一直卡在Building gradle project info最快速解决方案
- Redis常用命令