浅谈深浅拷贝

在进行iOS开发时候,深拷贝很多人不经常用,但是有时候出了bug,追查很久,才发现是深浅拷贝的问题,往往浪费很多时间。

场景:

假设在即时通讯发消息,下载东西时候,对文件进行model定义后,多层传参。在某一层方法的时候,这个model改变了里面的值比如isDownload=YES;然后最外层方法还需要isDownload原来的状态,没有理解深浅拷贝就会犯错。

深拷贝同浅拷贝的区别:

浅拷贝是指针拷贝,对一个对象进行浅拷贝,相当于对指向对象的指针进行复制,产生一个新的指向这个对象的指针,那么就是有两个指针指向同一个对象,这个对象销毁后两个指针都应该置空。深拷贝是对一个对象进行拷贝,相当于对对象进行复制,产生一个新的对象,那么就有两个指针分别 指向两个对象。当一个对象改变或者被销毁后拷贝出来的新的对象不受影响。

实现深拷贝,需要实现NSCoying协议,实现- (id)copyWithZone:(NSZone *)zone方法。如果父类实现了这个方法,子类重写时候不要忘记调用父类方法,再加上自己逻辑。父类没有实现的话,子类实现的时候要对父类也进行处理一下。

你可能感兴趣的:(浅谈深浅拷贝)