zoukankan      html  css  js  c++  java
  • 内存拷贝

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

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

    @interface Person : NSObject<SayHello, NSCopying>

     

     

    伪拷贝,相当于没有拷贝,只是让外界的对象执行了一次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] autorelease];

       person.gender = [[self.gender mutableCopy] autorelease];

        person.mArr = [[self.mArr mutableCopy] autorelease];

        return person ;

    }

  • 相关阅读:
    IOS UITableView 加载图片 卡的问题
    泛型
    正则表达式
    CSS 实现圆角表格
    CSS 横向滚动广告
    WebService
    CSS 弹出层 支持IE/FF/OP
    XML2DT DT2XML
    HttpWebRequest 调用 WebService 返回 xml
    CSS 自由伸展的三栏式版面
  • 原文地址:https://www.cnblogs.com/hjplcl/p/5204924.html
Copyright © 2011-2022 走看看