iOS 深拷贝和浅拷贝

一、深浅拷贝总的来说有两大类:集合类和非集合类

概念:指针复制俗称指针拷贝,对象复制也俗称内容拷贝;

1、非集合类深浅拷贝如:NSString、NSNumber等;

以下打印为地址结果:

很显然看出stringH和stringW地址一样,而stringQ地址不一样,说明stringW完成的是浅拷贝(指针拷贝),而stringQ是深拷贝(内容拷贝);

再如:

以下打印为地址结果:

四个地址全不一样;并且只要是copy,就不能给修改;地址不一样说明完成的都是深拷贝(内容拷贝);

2、集合类的深浅拷贝:如NSArray,NSDictionary等;

https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Collections/Articles/Copying.html

集合类的拷贝和非集合的惊人的相似,只是有一点不太一样;其实这里所谓的深拷贝还是有点争议,不过足够我们用了,要想真正意义上实现深拷贝还是要用到苹果官方API提到的方法:

NSArray *deepCopyArray=[[NSArray alloc] initWithArray:someArray copyItems:YES];

或者归档:

NSArray* trueDeepCopyArray = [NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:oldArray]];

编译器一直出问题,崩溃了都,先写到这,水平有限难免有纰漏,欢迎指正!
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章