实现<NSCopying>协议
2015-02-25 10:28
260 查看
如果你尝试复制自己的一个类,例如分数类
这样去复制
你会得到这样的错误
为了让自定义类实现复制方法,需要根据< NSCopying >协议实现一到两个方法
现在来测试下
控制台输出
可见f2是f1的成功复制,且地址不是一样的
#import "Fraction.h" @implementation Fraction - (instancetype)initWithFirst:(NSInteger)first second:(NSInteger)second { self = [self init]; if (self) { [self setFirst:first]; [self setSecond:second]; } return self; } + (instancetype)fractionWithFirst:(NSInteger)first second:(NSInteger)second { Fraction *f = [[Fraction alloc] initWithFirst:first second:second]; return f; } - (void)printFraction { NSLog(@"%ld / %ld", [self first], [self second]); } @end
这样去复制
newFraction = [myFraction mutableCopy];
你会得到这样的错误
*** -[AddressBook copyWithZone:]: selector not recognized *** Uncaught exception: *** -[AddressBook copyWithZone:]: selector not recognized
为了让自定义类实现复制方法,需要根据< NSCopying >协议实现一到两个方法
- (id)copyWithZone:(NSZone *)zone { Fraction *f = [[Fraction alloc] init]; [f setFirst:_first]; [f setSecond:_second]; return f; }
现在来测试下
Fraction *f1 = [Fraction fractionWithFirst:2 second:3]; Fraction *f2 = [f1 copy]; [f2 setFirst:1]; [f2 setSecond:2]; [f1 printFraction]; NSLog(@"%p", f1); [f2 printFraction]; NSLog(@"%p", f2);
控制台输出
2 / 3 0x100200b80 1 / 2 0x100202ba0
可见f2是f1的成功复制,且地址不是一样的
相关文章推荐
- Object-C中对自定义类实现<NSCopying>协议
- Object-C中对自定义类实现<NSCopying>协议
- Object-C中对自定义类实现<NSCopying>协议
- Object-C中对自定义类实现<NSCopying>协议
- 复制对象(二)<NSCopying>协议和属性的copy特性
- Objective-C深复制和<NSCopying>协议
- 短信猫软件的实现(C#)<十一>软件实现(完结篇)
- 用char*实现的一个完整的类,包含类的基本操作:一般构造、拷贝构造、赋值转换、重载 > >,< <
- 如何实现具有层次结构的 TreeView <三> (WPF/TreeView/Style/Template)
- List<T>采用delegate快速实现排序、查找等操作
- Java实现从IP和端口列表List<String>获取分离的IP和端口值
- 操作TreeView:,选中左边树的节点,点击>>按钮 将选择的节点展现到右边的树中,同时将选择的节点从左边的树中移除。。点击<<实现同样的功能。。。。
- 实现ftp多线程下载<一>
- Nullable<T> 的实现
- 如何实现具有层次结构的 TreeView <二> (WPF/TreeView/Style/Template)
- <一>基于Fourinone实现分布式计算上手指南和demo
- button在底部的多个view切换<实例三触摸和点击实现3D切换>
- 多样化实现Windows Phone 7本地数据库访问<下>
- 网站上有一个mp3文件,但是用<a href="my.mp3">下载</a>时,会在播放器里打开,请问我要怎样才能实现点击后下载呢?
- <四>基于淘宝Fourinone实现集群管理demo