先上代碼github洲押,如有錯誤請幫忙指出,謝謝圆凰!轉(zhuǎn)載請注明出處杈帐,喜歡的話,請點個贊吧专钉!
一挑童、概念
1、淺拷貝 = 指針拷貝:多了一個指針跃须,指向同一塊內(nèi)存地址(同一個對象)站叼。
2、深拷貝 = 內(nèi)容拷貝:多了一個指針菇民,指向不同的內(nèi)存地址(不同的對象)尽楔。
二、總結(jié)
1第练、對于不可變的非集合類的對象阔馋,copy是淺拷貝,mutableCopy是深拷貝复旬。
2垦缅、對于可變的非集合類的對象,copy和mutableCopy都是深拷貝驹碍。
3壁涎、對于不可變的數(shù)組,字典等集合類的對象志秃,copy是淺拷貝怔球,mutableCopy是深拷貝。
4浮还、對于可變的數(shù)組竟坛,字典等集合類的對象,copy和mutableCopy都是深拷貝。
注:集合類的對象深拷貝拷貝的是本身對象担汤,不包含里面的元素等對象涎跨,可以實現(xiàn)完全深拷貝整個集合對象請看下面代碼解釋
三、代碼解釋
1崭歧、不可變的非集合類對象
2隅很、可變的非集合類對象
3、不可變的集合類對象
4率碾、可變的集合類對象
5叔营、集合類對象的object的拷貝情況
注:集合類對象要實現(xiàn)對象里面的object也拷貝需要執(zhí)行如下方法
1、- (instancetype)initWithArray:(NSArray<ObjectType> *)array copyItems:(BOOL)flag;
/// 還有更多的歸檔解檔擴展方法所宰,具體請自行了解NSKeyedUnarchiver
2绒尊、+ (nullable id)unarchivedObjectOfClass:(Class)cls fromData:(NSData *)data error:(NSError **)error
從下圖可以得出結(jié)論,不支持NSCopying仔粥,NSMutableCopying協(xié)議的例如NSString婴谱,NSNumber拷貝后object的地址還是一致,沒有真正的復(fù)制一個出來件炉,不過支持NSCopying勘究,NSCoding的協(xié)議的object都能進行真正的深拷貝。