一、深淺拷貝總的來說有兩大類:集合類和非集合類
概念:指針複製俗稱指針拷貝,對象複製也俗稱內容拷貝;
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]];