美文网首页
iOS-基础篇(深拷贝和浅拷贝)

iOS-基础篇(深拷贝和浅拷贝)

作者: LeoDavid | 来源:发表于2016-06-13 13:18 被阅读373次

浅拷贝


“浅拷贝仅仅是把对象的引用复制,或者说对象的指针“

不是所有对象都能使用copy ,使用了copy必须遵守协议(实现 copyWithZone: 方法)对于很多现有的类,如Nsstring, NSDictionary 已经实现了CopyWithZone:。如果我们需要一个新的类,就需要手动来重写CopyWithZone的方法。

1 .当copy一个不可变对象时

copy并打印内存地址和retainCount 我们发现内存地址是一样的,并且retainCount为2

2 .当copy一个可变对象时

copy可变对象,并打印地址和retainCount,并且改变copy后的值 我们发现打印的地址不一样,并且retainCount为1,当改变copy后的值是,系统报错

总结

(1)当我们copy的是一个不可变的对象时,他的作用相当于retain

(2)当我们copy 的是一个可变对象时,副本对象是不可变的,同样实现了真正意义上的拷贝(copy一个Mutable类型可以深复制,但是其返回的 还是一个不可变的类型.)。

(3)copy方法,得到的是不可变对象,不管以前的是可变还是不可变。

深拷贝


”内容拷贝,源对象和副本指向的是不同的两个对象”,mutableCopy需要继承NSMutableCopying 协议才可以使用mutableCopy(实现 mutableCopyWithZone: 方法)

1 .当mutableCopy一个可变对象时

mutableCopy一个可变对象时,打印地址和retaincount 地址不一样,retaincount:1

2 .当mutableCopy一个不可变对象时

mutableCopy 一个不可变对象,打印 地址不一样,retaincount:1

总结

(1)源对象引用计数器不变,副本计数器设置为1

(2)当我们使用mutabelCopy 时 ,无论源对象是否可变,复制对象是否可变,都能实现了真正意义上得拷贝

 (3)mutableCopy方法,得到的是可变对象,不管以前的是可变还是不可变。


相关文章

  • js浅拷贝深拷贝

    js浅拷贝,深拷贝的简单实现 基础数据 浅拷贝 深拷贝

  • iOS-基础篇(深拷贝和浅拷贝)

    浅拷贝 “浅拷贝仅仅是把对象的引用复制,或者说对象的指针“ 不是所有对象都能使用copy ,使用了copy必须遵守...

  • iOS深拷贝(MutableCopy)与浅拷贝(Copy)的区别

    深拷贝和浅拷贝的概念 iOS中有深拷贝和浅拷贝的概念,那么何为深拷贝何为浅拷贝呢?浅拷贝:浅拷贝并不拷贝对象本身,...

  • iOS面试题-第二页

    11.深拷贝和浅拷贝的理解. 深拷贝;拷贝的内容. 浅拷贝:拷贝的指针. 深拷贝如: NSMutableDicti...

  • iOS - copy 与 mutableCopy

    一说到拷贝,就不得不提浅拷贝和深拷贝。 何谓浅拷贝?何谓深拷贝? 往简单的说: 浅拷贝:拷贝地址。 深拷贝:拷贝内...

  • IOS

    一、IOS基础 1、浅拷贝与深拷贝浅拷贝:拷贝对象的指针成员变量和原对象的指针成员变量指向同一块内存空间。深拷贝:...

  • JS中的深拷贝与浅拷贝

    知乎:js中的深拷贝和浅拷贝? 掘金: js 深拷贝 vs 浅拷贝 前言 首先深拷贝与浅拷贝只针对 Object,...

  • iOS--拷贝相关题

    1、什么是深拷贝什么是浅拷贝?浅拷贝和深拷贝的区别 * 浅拷贝(shallow copy):指针拷贝,对于被拷贝对...

  • 2020前端高频面试题总结(附答案)

    [ js基础题 ] 1. new的实现原理是什么? 2. 深拷贝和浅拷贝的区别是什么 深拷贝 浅拷贝 3. bin...

  • iOS-浅拷贝和深拷贝

    深拷贝和浅拷贝这个问题在面试中常常被问到,而在实际开发中,只要稍有不慎,就会在这里出现问题。尤其对于初学者来说,我...

网友评论

      本文标题:iOS-基础篇(深拷贝和浅拷贝)

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