国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

編寫高質量OC代碼52建議總結:22.理解NSCopying協議

2019-11-08 00:19:26
字體:
來源:轉載
供稿:網友
如果想令自己的類支持拷貝操縱,就要實現NSCopying協議
 -(id)copyWithZone:(NSZone *)zone{     return nil; } NSZone:以前開發程序時,會把內存分為不同的區,對象會創建在某個區里。現在不用,每個程序都會有一個默認區,這個參數不用管。。。  copy方法由NSObject實現,當我們想要覆寫copy方法是,實際需要實現的是copyWithZone方法。 
 -(id)mutableCopyWithZone:(NSZone *)zone{     return nil; }  -(id)mutableCopy{     return nil; }  mutableCopy這個輔助方法與copy類似,也是用默認參數zone來調用mutableCopyWithZone。 在可變類中覆寫copyWithZone時,不要返回可變的拷貝對象,應該返回一個不可變的版本。 對于NSArray和NSMutableArray來說,下面的關系總是成立的 [NSMutableArray copy] => NSArray [NSArray mutableCopy] => NSMutableArray 注意:在可變對象上調用copy方法會返回一個不可變實例。這樣做是為了能在可變版本與不可變版本之間自由切換。  Foundation 框架中所有集合類在默認情況下都執行淺拷貝,只拷貝容器對象本身,不復制其中數據。主要原因是,容器內的對象未必都能拷貝,而調用者也未必想在拷貝容器的時候一并拷貝其中的每個對象。 因為沒有深拷貝的協議方法,其具體的實現方法由每個類來確定。在絕大多數情況下都是淺拷貝,深拷貝的方法只能自己來編寫。  總結: 1.自定義對象想具備拷貝功能,需要實現NSCopying協議 2.自定義對象想分為可變與不可變兩個版本,需要同時實現NSCopying和NSMutableCopying協議 3.復制對象時需要決定執行深拷貝還是淺拷貝,一般情況下盡量執行淺拷貝 4.如果對象需要執行深拷貝,可以考慮新增加一個執行深拷貝的方法
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 凌源市| 九台市| 江西省| 上饶市| 龙游县| 南阳市| 响水县| 长白| 衡山县| 邵东县| 镇坪县| 阿拉善右旗| 枣庄市| 尼木县| 石渠县| 洛川县| 文山县| 灌南县| 扶风县| 南木林县| 大英县| 方城县| 绩溪县| 淳化县| 西乌| 蕉岭县| 洮南市| 渝北区| 民和| 麻阳| 紫云| 克山县| 淳安县| 浠水县| 藁城市| 商洛市| 阿克陶县| 辉县市| 定兴县| 东阿县| 黑水县|