1、深拷貝就是內容拷貝,淺拷貝就是指針拷貝。本質區(qū)別在于: 是否開啟新的內存地址 是否影響內存地址的引用計數 示例分析 在iOS中深拷貝與淺拷貝要更加的復雜,涉及到容器與非容器、可變與不可變對象的copy與mutableCopy。
創(chuàng)新互聯(lián)建站主打移動網站、成都做網站、網站建設、外貿營銷網站建設、網站改版、網絡推廣、網站維護、域名與空間、等互聯(lián)網信息服務,為各行業(yè)提供服務。在技術實力的保障下,我們?yōu)榭蛻舫兄Z穩(wěn)定,放心的服務,根據網站的內容與功能再決定采用什么樣的設計。最后,要實現符合網站需求的內容、功能與設計,我們還會規(guī)劃穩(wěn)定安全的技術方案做保障。
2、用copy修飾的屬性,在setter時,會先調用傳入對象的copy方法得到一份拷貝后再retain,但不同的對象調用copy方法,可能是深拷貝也可能是淺拷貝,如果是淺拷貝,則兩個指針指向一個內存,舊對象引用計數會加1。
3、淺拷貝 :指針拷貝,復制一個新的指針,只想同一塊內存區(qū)域。實際內存并沒有發(fā)生拷貝 深拷貝 :內容拷貝,拷貝數據到一塊新內存區(qū)域,指針指向拷貝的數據區(qū) strong: 淺拷貝,也就是指針引用,很明顯的。
4、內存中存在了 兩份獨立對象本身。 用網上一哥們通俗的話將就是: 淺復制好比你和你的影子,你完蛋,你的影子也完蛋 深復制好比你和你的克隆人,你完蛋,你的克隆人還活著。
到這里全部真相大白了,說明我們的copy修飾的array進行了淺拷貝,我們知道只有當不可變對象使用copy時才是淺拷貝,那我們copy修飾的是一個可變數組,賦值的是一個不可變數組。
為了避免可變對象找不到方法crash,或者不可變對象被篡改,iOS中的不可變對象、容器一般都使用copy修飾符,保證setter方法中對傳入的新對象調用copy方法。
block 本質上是一個OC對象,內部有個 isa 指針,可以用 retain/strong/copy 等修飾詞修飾。但是 block 在創(chuàng)建的時候內存默認分配在棧上,而不是堆上的。
淺拷貝就是拷貝指向原來對象的指針,使原對象的引用計數+1,可以理解為創(chuàng)建了一個指向原對象的新指針而已,并沒有創(chuàng)建一個全新的對象。
用copy修飾的屬性,在setter時,會先調用傳入對象的copy方法得到一份拷貝后再retain,但不同的對象調用copy方法,可能是深拷貝也可能是淺拷貝,如果是淺拷貝,則兩個指針指向一個內存,舊對象引用計數會加1。
淺拷貝 :指針拷貝,復制一個新的指針,只想同一塊內存區(qū)域。實際內存并沒有發(fā)生拷貝 深拷貝 :內容拷貝,拷貝數據到一塊新內存區(qū)域,指針指向拷貝的數據區(qū) strong: 淺拷貝,也就是指針引用,很明顯的。
用一句簡單的話來說就是淺拷貝只是對指針的拷貝,拷貝后兩個指針指向同一個內存空間,深拷貝不但對指針進行拷貝,而且對指針指向的內容進行拷貝,經深拷貝后的指針是指向兩個不同地址的指針。
retain:引用計數器+1,指向同一地址。結果和淺拷貝一樣,僅僅是使得對象的引用計數器自增copy:對不可變對象等同與retain,指針拷貝,引用計數器+1。對可變對象執(zhí)行深拷貝,等同mutableCopy,內容拷貝。
1、到這里全部真相大白了,說明我們的copy修飾的array進行了淺拷貝,我們知道只有當不可變對象使用copy時才是淺拷貝,那我們copy修飾的是一個可變數組,賦值的是一個不可變數組。
2、通俗解釋:深拷貝是內容拷貝,淺拷貝是地址拷貝 區(qū)別點:深拷貝會創(chuàng)建一個新的內存空間,拷貝的值是一樣的,但是內存地址不一樣。
3、在iOS中深拷貝與淺拷貝要更加的復雜,涉及到容器與非容器、可變與不可變對象的copy與mutableCopy。
分享標題:ios開發(fā)深淺拷貝 深淺拷貝的方法
本文路徑:http://jinyejixie.com/article32/dgghcsc.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供云服務器、網站收錄、網站設計、企業(yè)建站、網站改版、網站策劃
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)