新聞中心
iOS中的深淺拷貝
1、深拷貝就是內(nèi)容拷貝,淺拷貝就是指針拷貝。本質(zhì)區(qū)別在于: 是否開啟新的內(nèi)存地址 是否影響內(nèi)存地址的引用計數(shù) 示例分析 在iOS中深拷貝與淺拷貝要更加的復雜,涉及到容器與非容器、可變與不可變對象的copy與mutableCopy。

創(chuàng)新互聯(lián)建站主打移動網(wǎng)站、成都做網(wǎng)站、網(wǎng)站建設、外貿(mào)營銷網(wǎng)站建設、網(wǎng)站改版、網(wǎng)絡推廣、網(wǎng)站維護、域名與空間、等互聯(lián)網(wǎng)信息服務,為各行業(yè)提供服務。在技術實力的保障下,我們?yōu)榭蛻舫兄Z穩(wěn)定,放心的服務,根據(jù)網(wǎng)站的內(nèi)容與功能再決定采用什么樣的設計。最后,要實現(xiàn)符合網(wǎng)站需求的內(nèi)容、功能與設計,我們還會規(guī)劃穩(wěn)定安全的技術方案做保障。
2、用copy修飾的屬性,在setter時,會先調(diào)用傳入對象的copy方法得到一份拷貝后再retain,但不同的對象調(diào)用copy方法,可能是深拷貝也可能是淺拷貝,如果是淺拷貝,則兩個指針指向一個內(nèi)存,舊對象引用計數(shù)會加1。
3、淺拷貝 :指針拷貝,復制一個新的指針,只想同一塊內(nèi)存區(qū)域。實際內(nèi)存并沒有發(fā)生拷貝 深拷貝 :內(nèi)容拷貝,拷貝數(shù)據(jù)到一塊新內(nèi)存區(qū)域,指針指向拷貝的數(shù)據(jù)區(qū) strong: 淺拷貝,也就是指針引用,很明顯的。
4、內(nèi)存中存在了 兩份獨立對象本身。 用網(wǎng)上一哥們通俗的話將就是: 淺復制好比你和你的影子,你完蛋,你的影子也完蛋 深復制好比你和你的克隆人,你完蛋,你的克隆人還活著。
ios開發(fā)之修飾符copy
到這里全部真相大白了,說明我們的copy修飾的array進行了淺拷貝,我們知道只有當不可變對象使用copy時才是淺拷貝,那我們copy修飾的是一個可變數(shù)組,賦值的是一個不可變數(shù)組。
為了避免可變對象找不到方法crash,或者不可變對象被篡改,iOS中的不可變對象、容器一般都使用copy修飾符,保證setter方法中對傳入的新對象調(diào)用copy方法。
block 本質(zhì)上是一個OC對象,內(nèi)部有個 isa 指針,可以用 retain/strong/copy 等修飾詞修飾。但是 block 在創(chuàng)建的時候內(nèi)存默認分配在棧上,而不是堆上的。
iOS深拷貝與淺拷貝(附demo)
淺拷貝就是拷貝指向原來對象的指針,使原對象的引用計數(shù)+1,可以理解為創(chuàng)建了一個指向原對象的新指針而已,并沒有創(chuàng)建一個全新的對象。
用copy修飾的屬性,在setter時,會先調(diào)用傳入對象的copy方法得到一份拷貝后再retain,但不同的對象調(diào)用copy方法,可能是深拷貝也可能是淺拷貝,如果是淺拷貝,則兩個指針指向一個內(nèi)存,舊對象引用計數(shù)會加1。
淺拷貝 :指針拷貝,復制一個新的指針,只想同一塊內(nèi)存區(qū)域。實際內(nèi)存并沒有發(fā)生拷貝 深拷貝 :內(nèi)容拷貝,拷貝數(shù)據(jù)到一塊新內(nèi)存區(qū)域,指針指向拷貝的數(shù)據(jù)區(qū) strong: 淺拷貝,也就是指針引用,很明顯的。
用一句簡單的話來說就是淺拷貝只是對指針的拷貝,拷貝后兩個指針指向同一個內(nèi)存空間,深拷貝不但對指針進行拷貝,而且對指針指向的內(nèi)容進行拷貝,經(jīng)深拷貝后的指針是指向兩個不同地址的指針。
retain:引用計數(shù)器+1,指向同一地址。結果和淺拷貝一樣,僅僅是使得對象的引用計數(shù)器自增copy:對不可變對象等同與retain,指針拷貝,引用計數(shù)器+1。對可變對象執(zhí)行深拷貝,等同mutableCopy,內(nèi)容拷貝。
理解iOS中深淺拷貝-為什么NSString使用copy
1、到這里全部真相大白了,說明我們的copy修飾的array進行了淺拷貝,我們知道只有當不可變對象使用copy時才是淺拷貝,那我們copy修飾的是一個可變數(shù)組,賦值的是一個不可變數(shù)組。
2、通俗解釋:深拷貝是內(nèi)容拷貝,淺拷貝是地址拷貝 區(qū)別點:深拷貝會創(chuàng)建一個新的內(nèi)存空間,拷貝的值是一樣的,但是內(nèi)存地址不一樣。
3、在iOS中深拷貝與淺拷貝要更加的復雜,涉及到容器與非容器、可變與不可變對象的copy與mutableCopy。
分享名稱:ios開發(fā)深淺拷貝 深淺拷貝的方法
當前地址:http://biofuelwatch.net/article/dgghcsc.html


咨詢
建站咨詢
