iOS SDK详解之NSCopying协议
2015-08-15 15:18
671 查看
原创blog,转载请注明出处
http://blog.csdn.net/hello_hwc?viewmode=contents
欢迎关注我的iOS SDK详解专栏
http://blog.csdn.net/column/details/huangwenchen-ios-sdk.html
前言:NSCopy协议是对对象进行拷贝的协议。Copy后的对象和原对象是两个对象,要分开考虑其生命周期。Copy后的对象应当对原始对象不依赖,不影响。
使用NSCopy协议只需要实现一个方法
使用
然后在LLDB中可以查看对象地址,可以看到是两个独立的对象
Swift
简单测试
这里顺便提一下,如何在Swift中声明一个OC中的copy 属性
使用关键字
http://blog.csdn.net/hello_hwc?viewmode=contents
欢迎关注我的iOS SDK详解专栏
http://blog.csdn.net/column/details/huangwenchen-ios-sdk.html
前言:NSCopy协议是对对象进行拷贝的协议。Copy后的对象和原对象是两个对象,要分开考虑其生命周期。Copy后的对象应当对原始对象不依赖,不影响。
使用NSCopy协议只需要实现一个方法
copyWithZone:即可
举例
OC@interface MyModel:NSObject<NSCopying> @property (copy,nonatomic)NSString * name; @property (nonatomic)int age; @end @implementation MyModel -(instancetype)copyWithZone:(NSZone *)zone{ MyModel * copyedModel = [[self.class allocWithZone:zone] init]; copyedModel->_name = self.name; copyedModel->_age = self.age; return copyedModel; } @end
使用
MyModel * model = [[MyModel alloc] init]; model.name = @"wenchen"; model.age = 24; MyModel * copyedModel = [model copy];
然后在LLDB中可以查看对象地址,可以看到是两个独立的对象
(lldb) po copyedModel <MyModel: 0x7f958971b690> (lldb) po model <MyModel: 0x7f958971b5b0>
Swift
class MyModel:NSObject,NSCopying{ func copyWithZone(zone: NSZone) -> AnyObject { let copyedModel = self.dynamicType() return copyedModel } required override init() { }
简单测试
let model1 = MyModel() let model2 = model1.copy()
(lldb) po model1 <SWTest.MyModel: 0x7fafe0476f40> (lldb) po model2 <SWTest.MyModel: 0x7fafe0476ec0>
这里顺便提一下,如何在Swift中声明一个OC中的copy 属性
@NSCopying var name:NSString?
使用关键字
@NSCopying
相关文章推荐
- 高仿 IOS遨游哈哈最新版
- VMware Workstation11.0安装Mac OS X 10.10最完整指南(包含所需所有资源下载)
- 苹果开发 笔记(61)recursiveDescription 方法
- NSNumberFormatter的使用
- ios开发问题汇总
- iOS开发之OC内存管理
- 【iOS开发】 CoreText 使用教程:以创建一个简单的杂志应用为例
- 学习iOS看的资源总结
- ios移动开发block回调和代理传参
- ios 字号问题
- iOS 手势识别——拖拽
- iOS新的打包方式
- iOS开发之设计模式
- IOS开发之粒子效果
- iOS开发系列--地图与定位
- iOS 手势识别 ——长按和轻扫(swipe)
- 解决 iOS8 定位授权的问题
- iOS 手势识别 旋转和缩放(捏合)
- Ios 从无到有项目 MVVM模式(两)
- 自定义iOS7导航栏背景,标题和返回按钮文字颜色