深入理解copy

weixin_34138377發表於2017-12-04

注意看本體  如果本體是不可變的。 copy的話是淺拷貝。 指標複製.

本體是可變的。 那麼copy就說深拷貝。 開闢新的記憶體。 但是返回的物件是不可變對。

mutCopy 都是深拷貝。返回的物件是可變的。

簡單說就是  copy 返回不可變物件,metableCopy 返回可變物件。但 在程式中

對於 不可變物件(如:常量 。NSString *a = @"abc".)copy 返回不可變物件,常量本來就是不可變的。如果重新分配記憶體,有點浪費啦。

所有 copy 後的物件 和a 都指向 記憶體中的一塊儲存常量的記憶體塊。 及淺拷貝,此時指向常量的地址 *a 引用計數為2。metableCopy 返回可變物件,所有會賦值內容。及深拷貝。

不可變物件(如:常量)copy 是淺拷貝, metableCopy 是深拷貝。

對於可變物件 copy 返回不可變物件, 所以會拷貝內容,其內容不可變。 metableCopy 也會拷貝內容,但內容是可變的。 都是深拷貝。

可變物件 copy 和 metableCopy 都是 深拷貝