OC 語言的拷貝分三種:淺拷貝,不完全深拷貝午笛,完全深拷貝鱼辙,來讓我們舉個??:
1.淺拷貝:沒有開辟新的指針地址,只是將新對象指向原來的指針矗烛。
2.不完全深拷貝:開辟了新的指針地址辅柴,但是如果拷貝的對象是容器類(NSArray等),容器內(nèi)的元素還是原來的的元素瞭吃,即容器內(nèi)元素指針地址指向同一塊內(nèi)存碌嘀。不完全深拷貝拷貝的只是一個容器對象(也就是一個殼),容器內(nèi)的對象只保存一份引用。
3.完全深拷貝:開辟了新的指針地址虱而,而且如果拷貝的對象是容器類(NSArray等)筏餐,容器內(nèi)的元素同樣也深拷貝了开泽,開辟了新的內(nèi)存空間牡拇,即容器內(nèi)元素指針地址也改變了。完全深拷貝是連同容器和內(nèi)容對象一起拷貝一份,完完全全的拷貝穆律。
拷貝的目的是產(chǎn)生兩個互不影響的對象惠呼,所以:
1、對不可變對象來說峦耘,由于對象本身不可以進行修改剔蹋,即不能對它產(chǎn)生影響。所以不可變對象的 copy 都是淺拷貝辅髓。
2泣崩、不可變對象的 mutableCopy 是深拷貝。(這里說的深拷貝是不完全深拷貝)
3洛口、可變對象的 copy 是深拷貝矫付。
4、可變對象的 mutableCopy 是深拷貝第焰。
參考以下列表說明
但是的但是————————————下面很重要
以下是不完全深拷貝的理解:
當我們修改copyArry的時候不會影響到arry,但是修改copyArry里面的objc的時候,arry里面的objc也會改變
以下是完全深拷貝的理解:
完全深拷貝是連同容器和內(nèi)容對象一起拷貝一份,完完全全的拷貝.
我們不論是修改copyArry還是修改copyArry里面的objc都不會影響到arry和arry里面的objc.
默認情況下的深拷貝都是不完全深拷貝买优,如果需要實現(xiàn)完全深拷貝,使用下面的方法:
對于容器對象挺举,也完全遵守上面的情況杀赢,只不過發(fā)生深拷貝時對容器對象本身來說是深拷貝,因為產(chǎn)生了新對象湘纵,而對容器內(nèi)的元素來說是淺拷貝脂崔。即:修改容器內(nèi)的元素,無論是原來對象還是拷貝產(chǎn)生的新對象梧喷,兩個容器內(nèi)的元素都會發(fā)生變化脱篙,因為容器內(nèi)存的是容器元素的內(nèi)存地址娇钱。如果想讓容器對象本身及容器內(nèi)的元素都發(fā)生完全深拷貝,使用[[NSArray alloc] initWithArray:mArr1copyItems:YES]绊困;才能真正的實現(xiàn)完全深拷貝文搂。后面的item一定要設置為YES才是完全深拷貝
最后,如果本文章對你有幫助秤朗,希望點贊煤蹭,評論666
本人github開源庫地址:https://github.com/lishiping?,希望對廣大iOS開發(fā)者有幫助
Cocoapod公開庫:
1.SafeData---使用array取视,dictionary類別硝皂,主要是保護數(shù)組防止插入空數(shù)組,防止數(shù)組越界作谭,在開發(fā)中非常實用稽物,字典的類別也非常實用,可以直接得到轉換后的類型?SafeData
2.SPDebugBar ---A tool to help developers and testers quickly switch the server address, convenient to debug the program.一個小工具幫助開發(fā)人員和測試人員快速切換服務器地址折欠,方便調(diào)試程序贝或,可以在debug模式下或者測試包上方便切換地址SPDebugBar
3.SPFastPush---Use Macro Fast NavigationController push next VC,and Fast Pop anther VC.使用宏幫助導航控制器快速push下一個Viewcontroller,并使用KVC快速給下一個VC賦值,也可以使用宏定義快速返回上一層VC或者指定的VC?SPFastPush
4.SPMacro---一些foundation層的一些宏定義锐秦,打印宏定義咪奖,類型判斷,通知使用酱床,線程使用等羊赵,和一些UIKit層的宏定義,屏幕方面的宏定義扇谣,顏色方面的宏定義昧捷,圖片宏定義SPMacro
5.SPWebView---SPWebView是一個基于OC代碼實現(xiàn)的WebView輕量級組件,將UIWebView和WKWebView的API封裝成統(tǒng)一的類去使用,并且在加載網(wǎng)頁的時候提供進度條,同時簡化JS與OC互相調(diào)用及傳遞數(shù)據(jù)的方式。仿微信界面?SPWebView
6.SPCategory---SPWebView是一個常用類別庫,size,字符串,hud等?SPCategory