Copy與MutableCopy區(qū)別
1敛助、首先這兩個都是對對象的進(jìn)行拷貝操作,但是拷貝涉及到深拷貝和淺拷貝
深拷貝:對象的拷貝,拷貝完了之后是兩個不同的對象屋确,只是對象的屬性和值是相同的纳击。對其中一個對象進(jìn)行操作“不會”影響到另一個對象。
淺拷貝:指針的拷貝攻臀,只是將源對象的指針拷貝到另一個地方去焕数,產(chǎn)生了兩個指針指向的是同一個對象,對一種一個對象進(jìn)行操作“會”影響到另一個對象刨啸。
以數(shù)組為例:
[array copy]; //對一個不可變數(shù)組進(jìn)行copy, 賦值指針無新對象產(chǎn)生,淺拷貝
[mutableArray copy];//對一個可變數(shù)組進(jìn)行copy,產(chǎn)生一個新的不可變數(shù)組,深拷貝
[array mutableCopy];對一個不可變數(shù)組進(jìn)行mutable copy,產(chǎn)生一個新的可變數(shù)組堡赔,深拷貝
[mutableArray mutableCopy];//對一個可變數(shù)組進(jìn)行mutable copy,產(chǎn)生一個新的可變數(shù)組
自定義對象不能拷貝,除非實現(xiàn)了copy協(xié)議和mutablecopy協(xié)議
判斷數(shù)組的深拷貝或淺拷貝设联,看數(shù)組里面元素的地址是否重新拷貝,但是也僅僅是拷貝內(nèi)容一層善已,若內(nèi)容中還有數(shù)組則那個內(nèi)容種數(shù)組的內(nèi)容是相同的灼捂,也就是淺拷貝
完全深拷貝
dataArray3 = [NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:dataArray2]];
不管多少層都可以進(jìn)行了深拷貝,但是必須要數(shù)組中的元素實現(xiàn)結(jié)歸檔(NSCoding)協(xié)議