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