iOS SDK详解之NSCopying协议

原创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协议只需要实现一个方法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

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值