zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    8.8总结
    8.4总结
    8.3总结
    题目分享H 二代目
    题目分享G 二代目
    题目分享E 二代目
    题目分享F 二代目
    题目分享D 二代目
    题目分享C 二代目
    题目分享Y
  • 原文地址:https://www.cnblogs.com/jhcelue/p/7268417.html
Copyright © 2011-2022 走看看