慕課網(wǎng),,程序員升職加薪神器,點擊免費學(xué)習(xí)
摘要
在Objective-C中,一個對象可以調(diào)用copy或mutableCopy方法來創(chuàng)建一個副本對象,本文著重講解如何正確使用copy的功能.
首先,,什么是copy,? Copy的字面意思是“復(fù)制”、“拷貝”,,是一個產(chǎn)生副本的過程,。 常見的復(fù)制有:文件復(fù)制,作用是利用一個源文件產(chǎn)生一個副本文件,。 特點:1,、修改源文件的內(nèi)容,不會影響副本文件,; 2,、修改副本文件的內(nèi)容,不會影響源文件,。 OC中copy的作用是:利用一個源對象產(chǎn)生一個副本對象 特點:1,、修改源對象的屬性和行為,不會影響副本對象,; 2,、修改副本對象的屬性和行為,不會影響源對象,。 如何使用copy功能,? 一個對象可以調(diào)用copy或mutableCopy方法來創(chuàng)建一個副本對象。 1,、copy:創(chuàng)建的時不可變副本(如NSString,、NSArray、NSDictionary),。 2,、mutableCopy:創(chuàng)建的可變副本(如NSMutableString、NSMutableArray,、NSMutableDictionary),。 使用copy功能的前提: 1、copy:需要遵守NSCopying協(xié)議,,實現(xiàn)copyWithZone:方法,。 @protocol NSCopying - (id)copyWithZone:(NSZone *)zone; 2,、mutableCopy : 需要遵守NSMutableCopying協(xié)議,實現(xiàn)mutableCopyWithZone:方法 @protocol NSMutableCopying - (id)mutableCopyWithZone:(NSZone *)zone; @end 深復(fù)制和淺復(fù)制的區(qū)別: 深復(fù)制(深拷貝,、內(nèi)容拷貝,、deep copy): 特點:1、源對象和副本對象是不同的兩個對象,; 2,、源對象引用計數(shù)器不變,副本對象計數(shù)器為1(因為是新產(chǎn)生的),。 本質(zhì):產(chǎn)生了新對象,。 淺復(fù)制(淺拷貝、指針拷貝,、shallow copy): 特點:1,、源對象和副本對象是同一對象; 2,、源對象(副本對象)引用計數(shù)器+1,,相當于做一次retain操作。 本質(zhì):沒有產(chǎn)生新對象,。 常見的復(fù)制如下圖: 只有源對象和副本對象都不可變時,才是淺復(fù)制,,其他都是深復(fù)制,。 關(guān)于區(qū)分深復(fù)制與淺復(fù)制的一些詳細代碼如下:
@property內(nèi)存管理策略的選擇 1.非ARC 1> copy : 只用于NSString\block,; 2> retain : 除NSString\block以外的OC對象,; 3> assign : 基本數(shù)據(jù)類型、枚舉,、結(jié)構(gòu)體(非OC對象),,當2個對象相互引用,一端用retain,,一端 用assign,。
2.ARC 1> copy : 只用于NSString\block; 2> strong : 除NSString\block以外的OC對象,; 3> weak : 當2個對象相互引用,,一端用strong,一端用weak,; 4> assgin : 基本數(shù)據(jù)類型,、枚舉、結(jié)構(gòu)體(非OC對象),。 |
|