天天看點

iOS開發之Copy & MutableCopy及深複制 & 淺複制

1、使用copy或mutablecopy方法可以建立一個對象的副本。

copy:

(1)需要實作nscoppying協定

(2)建立的是不可變副本(如nsstring、nsarray、nsdictionary)

mutablecopy:

(1)需要先實作nsmutablecopying協定

(2)建立的是可變副本(如nsmutablestring、nsmutablearray、nsmutabledictionary)

【備注】copy的目的是建立副本,同時修改原始對象和複本不會互相幹擾

2、深複制 & 潛複制

深複制:

(1)内容拷貝,源對象和副本指向的是不同的兩個對象

(2)源對象引用計數器不變,副本計數器設定為1

淺複制:

(1)指針拷貝,源對象和副本指向的是同一個對象

(2)對象的引用計數器+1,其實相當于做了一次retain操作

【備注】隻有不可變對象建立不可變副本(copy)才是淺複制,其他都是深複制

3、自定義對象的copywithzone

- (id)copywithzone:(nszone *)zone

{

    person *p = [[[self class] allocwithzone:zone] init];

    p.name = self.name;

    p.age = self.age;

    return p;

}

繼續閱讀