题记:
请问property里面的copy是深copy还是浅copy?
面对上面的这个问题,你先的理解什么是深copy和浅copy,参考以下的图说明:
我们创建了一个对象A,然后指针P1指向了对象A,这时候进行了浅copy,简单说就是把指针P2直接指向了对象A,而进行深copy之后又创新创建了对象B,同时新的指针指向了对象B。
总结上面就是,浅copy就是指针的copy,深copy就是指针和对象的copy
那我们在property里面用的copy到底是哪一种copy方式?这主要看你copy的内容,如果是对一个NSAraay\NSDictionary\NSString类型的copy那简单说就是浅copy,因为他们本质是不变的,你这时候做copy其实就是把指针指向对应的内存控件。
但是当你copy的是mul系列可变的时候就不一样了,因为mul对象本质存储的内容是在堆里面,这时候你copy实际上是做了一次深copy,copy完之后你得指针指向的内容变成了不可变的,所以对象本身也被copy了一份。
参考下表
源对象类型 | 源对象类型 | 副本对象类型 | 是否产生新对象 | 拷贝类型 |
---|---|---|---|---|
NS* | copy | NS* | 否 | 浅拷贝 |
NS* | mutableCopy | NSMutable* | 是 | 深拷贝 |
NSMutable* | copy | NS* | 是 | 深拷贝 |
NSMutable* | mutableCopy | NSMutable* | 是 | 深拷贝 |
总结:
property里面的copy根据实际情况确定具体是深copy还是浅copy
水平有限,分析有可能局限,如有问题可以指正