Copy(定義,特色,深複製,淺複製)(非ARC,ARC的運用範圍)

什麼是copy?atom

Copy的字面意思是「複製」,「拷貝」,是一個產生副本的過程。spa

做用:利用一個源對象產生一個副本對象。指針

特色:對象

1,修改源對象的屬性和行爲,不會影響副本對象。字符串

2,修改副本對象的屬性和行爲,不會影響源對象。it

如何使用copy功能io

一個對象能夠調用copy或者mutableCopy方法來建立一個副本對象。table

copy:建立的是不可變副本(如NSString,NSArray,NSDictionary)。數據類型

mutableCopy:建立的是可變副本(如NSMutableString,NSMutableArray,NSMutableDictionary)引用

使用copy功能的前提

copy:1.須要遵照NSCopying協議,實現copyWithZone方法。

          2.產生的確定是不可變副本

              若是是不可變對象調用copy方法產生不可變副本,那麼不會產生新的對象。         

@property NSCopying

-(id)copyWithZone:(NSZone*)zone;

@end

multableCopy:須要遵照NSMutableCopying協議,實現mutablecopyWithZone方法

@property NSCopying

-(id)mutableCopyWithZone:(NSZone*)zone;

@end

深複製(深拷貝,內容拷貝,deep copy)

1,源對象和副本對象是不一樣的兩個對象

2,源對象引用計數器不變,副本對象計數器爲1(由於是新產生的)。

3,本質是:產生了新的對象。

 

淺複製(淺拷貝,指針拷貝,shallow copy)

1,源對象和副本對象是同一個對象。

2,源對象(副本對象)引用計數器+1,至關於作一次retain操做

3,本質是:沒有產生新的對象。

 

copy用於字符串中

@property(nonatomic,copy)NSString *name.

 

非ARC:

1,copy:只用於NSString

2,retain:除NSString之外的OC對象

3,assign:基本數據類型,枚舉,結構體(非OC對象),當2個對象相互引用,一端用retain,一端用assign

ARC:

1,copy:只用於NSString

2,strong:除NSString之外的OC對象

3,weak:當2對象相互引用,一端用strong,一端用weak。

4,assign:基本數據類型,枚舉,結構體(非OC對象)。

相關文章
相關標籤/搜索