ios開發(fā)深淺拷貝 深淺拷貝的方法

iOS中的深淺拷貝

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

創(chuàng)新互聯(lián)建站主打移動網(wǎng)站、成都做網(wǎng)站、網(wǎng)站建設(shè)、外貿(mào)營銷網(wǎng)站建設(shè)、網(wǎng)站改版、網(wǎng)絡(luò)推廣、網(wǎng)站維護(hù)、域名與空間、等互聯(lián)網(wǎng)信息服務(wù),為各行業(yè)提供服務(wù)。在技術(shù)實(shí)力的保障下,我們?yōu)榭蛻舫兄Z穩(wěn)定,放心的服務(wù),根據(jù)網(wǎng)站的內(nèi)容與功能再決定采用什么樣的設(shè)計(jì)。最后,要實(shí)現(xiàn)符合網(wǎng)站需求的內(nèi)容、功能與設(shè)計(jì),我們還會規(guī)劃穩(wěn)定安全的技術(shù)方案做保障。

2、用copy修飾的屬性,在setter時(shí),會先調(diào)用傳入對象的copy方法得到一份拷貝后再retain,但不同的對象調(diào)用copy方法,可能是深拷貝也可能是淺拷貝,如果是淺拷貝,則兩個(gè)指針指向一個(gè)內(nèi)存,舊對象引用計(jì)數(shù)會加1。

3、淺拷貝 :指針拷貝,復(fù)制一個(gè)新的指針,只想同一塊內(nèi)存區(qū)域。實(shí)際內(nèi)存并沒有發(fā)生拷貝 深拷貝 :內(nèi)容拷貝,拷貝數(shù)據(jù)到一塊新內(nèi)存區(qū)域,指針指向拷貝的數(shù)據(jù)區(qū) strong: 淺拷貝,也就是指針引用,很明顯的。

4、內(nèi)存中存在了 兩份獨(dú)立對象本身。 用網(wǎng)上一哥們通俗的話將就是: 淺復(fù)制好比你和你的影子,你完蛋,你的影子也完蛋 深復(fù)制好比你和你的克隆人,你完蛋,你的克隆人還活著。

ios開發(fā)之修飾符copy

到這里全部真相大白了,說明我們的copy修飾的array進(jìn)行了淺拷貝,我們知道只有當(dāng)不可變對象使用copy時(shí)才是淺拷貝,那我們copy修飾的是一個(gè)可變數(shù)組,賦值的是一個(gè)不可變數(shù)組。

為了避免可變對象找不到方法crash,或者不可變對象被篡改,iOS中的不可變對象、容器一般都使用copy修飾符,保證setter方法中對傳入的新對象調(diào)用copy方法。

block 本質(zhì)上是一個(gè)OC對象,內(nèi)部有個(gè) isa 指針,可以用 retain/strong/copy 等修飾詞修飾。但是 block 在創(chuàng)建的時(shí)候內(nèi)存默認(rèn)分配在棧上,而不是堆上的。

iOS深拷貝與淺拷貝(附demo)

淺拷貝就是拷貝指向原來對象的指針,使原對象的引用計(jì)數(shù)+1,可以理解為創(chuàng)建了一個(gè)指向原對象的新指針而已,并沒有創(chuàng)建一個(gè)全新的對象。

用copy修飾的屬性,在setter時(shí),會先調(diào)用傳入對象的copy方法得到一份拷貝后再retain,但不同的對象調(diào)用copy方法,可能是深拷貝也可能是淺拷貝,如果是淺拷貝,則兩個(gè)指針指向一個(gè)內(nèi)存,舊對象引用計(jì)數(shù)會加1。

淺拷貝 :指針拷貝,復(fù)制一個(gè)新的指針,只想同一塊內(nèi)存區(qū)域。實(shí)際內(nèi)存并沒有發(fā)生拷貝 深拷貝 :內(nèi)容拷貝,拷貝數(shù)據(jù)到一塊新內(nèi)存區(qū)域,指針指向拷貝的數(shù)據(jù)區(qū) strong: 淺拷貝,也就是指針引用,很明顯的。

用一句簡單的話來說就是淺拷貝只是對指針的拷貝,拷貝后兩個(gè)指針指向同一個(gè)內(nèi)存空間,深拷貝不但對指針進(jìn)行拷貝,而且對指針指向的內(nèi)容進(jìn)行拷貝,經(jīng)深拷貝后的指針是指向兩個(gè)不同地址的指針。

retain:引用計(jì)數(shù)器+1,指向同一地址。結(jié)果和淺拷貝一樣,僅僅是使得對象的引用計(jì)數(shù)器自增copy:對不可變對象等同與retain,指針拷貝,引用計(jì)數(shù)器+1。對可變對象執(zhí)行深拷貝,等同mutableCopy,內(nèi)容拷貝。

理解iOS中深淺拷貝-為什么NSString使用copy

1、到這里全部真相大白了,說明我們的copy修飾的array進(jìn)行了淺拷貝,我們知道只有當(dāng)不可變對象使用copy時(shí)才是淺拷貝,那我們copy修飾的是一個(gè)可變數(shù)組,賦值的是一個(gè)不可變數(shù)組。

2、通俗解釋:深拷貝是內(nèi)容拷貝,淺拷貝是地址拷貝 區(qū)別點(diǎn):深拷貝會創(chuàng)建一個(gè)新的內(nèi)存空間,拷貝的值是一樣的,但是內(nèi)存地址不一樣。

3、在iOS中深拷貝與淺拷貝要更加的復(fù)雜,涉及到容器與非容器、可變與不可變對象的copy與mutableCopy。

分享標(biāo)題:ios開發(fā)深淺拷貝 深淺拷貝的方法
本文路徑:http://muchs.cn/article32/dgghcsc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器網(wǎng)站收錄、網(wǎng)站設(shè)計(jì)、企業(yè)建站、網(wǎng)站改版網(wǎng)站策劃

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名