美文网首页iOS Developer
深拷贝和浅拷贝

深拷贝和浅拷贝

作者: Jacky_Yang | 来源:发表于2017-05-19 09:38 被阅读15次

    深复制和浅复制

    1、概述

    对象拷贝有两种方式:浅复制和深复制。

    浅复制:拷贝指针

    深复制:拷贝整个对象

    2、深浅复制(copy、mutableCopy)

    • 不管是集合类对象,还是非集合类对象,接收到copy和mutableCopy消息时,都遵循以下准则:

      copy返回imutable对象(不可变对象);所以,如果对copy返回值使用mutable对象接口就会crash;

      mutableCopy返回mutable对象;

    • 在非集合类对象中:对immutable对象进行copy操作,是指针复制,mutableCopy操作时内容复制;对mutable对象进行copy和mutableCopy都是内容复制。

    • 在集合类对象中,对immutable对象进行copy,是指针复制,mutableCopy是内容复制;对mutable对象进行copy和mutableCopy都是内容复制。但是:集合对象的内容复制仅限于对象本身,对象元素仍然是指针复制。

    3、property里的copy和strong区别

    总结
    • NSString用copy修饰时,将一个可变字符串的值赋给它,此时copy属性字符串已不再指向string字符串对象,而是深拷贝了string字符串。

    • NSString用strong修饰时,将一个可变字符串赋值给它,此时strong属性字符串只不过是引用计数加1。

      将不可变字符串赋值给它,此时copy只做了浅拷贝。

    NSArray *arr = @[@"21312",@"22"];
    NSArray *copyarr = arr;
    NSMutableArray *muarr = [arr mutableCopy];
    NSLog(@"%p---%p---%p----%@----%@",arr,copyarr,muarr,arr,copyarr);
    
    0x6080000258c0---0x6080000258c0---0x6080000598f0----(
        21312,
        22
    )----(
        21312,
        22
    )
    

    相关文章

      网友评论

        本文标题:深拷贝和浅拷贝

        本文链接:https://www.haomeiwen.com/subject/gzaexxtx.html