zoukankan      html  css  js  c++  java
  • 关于NScopying的问题

    如果让一个自定义类 能用定义copy属性的实例变量就需对该类接收nscopying协议

    //外界如果想要让person对象执行copy方法,必须接收NSCopying协议,实现协议里的方法,来定义copy的细节。

    //一个类可以接收多个协议,协议与协议之间用逗号隔开。所有的协议写在父类后面的尖括号内部。

    @interface Person : NSObject<SayHello, NSCopying>

     

    @property (nonatomic, copy) NSString *name;

    @property (nonatomic, copy) NSString *gender;

    @property (nonatomic, retain) NSMutableArray *mArr;

    并且在.m文件中红重写copyWithZone方法

    //伪拷贝,相当于没有拷贝,只是让外界的对象执行了一次retain操作。

    //- (id)copyWithZone:(NSZone *)zone {

    //    return [self retain];

    //}

     

    //浅拷贝

    //拷贝的是地址,对象两个,共用一份内容,改变其中一个对象实例变量的值,另外一个也会访问到改变之后的值。但是一定要注意,字符串如果指向常量区,那么改值相当于重指向,并不会影响另外一个对象的值。

    //- (id)copyWithZone:(NSZone *)zone {

    //    Person *person = [[Person allocWithZone:zone] init];

    //    person.name = self.name;

    //    person.gender = self.gender;

    //    person.mArr = self.mArr;

    //    return person;

    //}

     

    //深拷贝,对象两份,内容两份,改变其中一个的值,另外一个不会发生改变。

    //拷贝怎么实现,到底是深拷贝还是浅拷贝,取决于内部代码的实现。

    - (id)copyWithZone:(NSZone *)zone {

        Person *person = [[Person allocWithZone:zone] init];

        person.name = [self.name mutableCopy];

        person.gender = [self.gender mutableCopy];

        person.mArr = [self.mArr mutableCopy];

        return person;

    }

  • 相关阅读:
    Codeforces Round #124 (Div. 2)
    Codeforces Round #158 (Div. 2)
    Codeforces round FF
    缕缕,
    拉伸 原来 就这一句话,
    tableveiw上面 的手势,
    reloaddata 是没有对 tableview的 headerview进行 刷新的,
    y
    考虑欠缺 以及 设计 导致的 工作量,
    present出来的 controller上的 controller里面用 navigationcontrolle了,失效了,
  • 原文地址:https://www.cnblogs.com/naizui/p/5096414.html
Copyright © 2011-2022 走看看