什麼是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對象)。