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]];

編譯器一直出問題,崩潰了都,先寫到這,水平有限難免有紕漏,歡迎指正!
 

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