ios開發(fā)nscopy iOs開發(fā) af取消下載

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

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

創(chuàng)新互聯(lián)憑借專業(yè)的設(shè)計(jì)團(tuán)隊(duì)扎實(shí)的技術(shù)支持、優(yōu)質(zhì)高效的服務(wù)意識和豐厚的資源優(yōu)勢,提供專業(yè)的網(wǎng)站策劃、成都做網(wǎng)站、網(wǎng)站制作、網(wǎng)站優(yōu)化、軟件開發(fā)、網(wǎng)站改版等服務(wù),在成都十年的網(wǎng)站建設(shè)設(shè)計(jì)經(jīng)驗(yàn),為成都數(shù)千家中小型企業(yè)策劃設(shè)計(jì)了網(wǎng)站。

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

3、內(nèi)部有個 isa 指針,可以用 retain/strong/copy 等修飾詞修飾。但是 block 在創(chuàng)建的時(shí)候內(nèi)存默認(rèn)分配在棧上,而不是堆上的。所以它的作用域僅限創(chuàng)建時(shí)候的作用域內(nèi),當(dāng)你在該作用域外調(diào)用該 block 時(shí),程序就會崩潰。

4、copy與strong類似。不同之處是strong的復(fù)制是多個指針指向同一個地址,而copy的復(fù)制每次會在內(nèi)存中拷貝一份對象,指針指向不同地址。copy一般用在修飾有可變對應(yīng)類型的不可變對象上,如NSString, NSArray, NSDictionary。

5、Block的聲明和線程安全 Block屬性的聲明,首先需要用copy修飾符,因?yàn)橹挥衏opy后的Block才會在堆中,棧中的Block的生命周期是和棧綁定的,可以參考之前的文章(iOS: 非ARC下返回Block)。

6、可以看到我們修改strCoptTest,拷貝對象也被修改了。

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

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

淺拷貝就是對內(nèi)存地址的復(fù)制,讓目標(biāo)對象指針和源對象指向同一片內(nèi)存空間,當(dāng)內(nèi)存銷毀的時(shí)候,指向這片內(nèi)存的幾個指針需要重新定義才可以使用,要不然會成為野指針。

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

ios開發(fā)mutablecopywithzone怎么寫

如果想自定義一下copy 那么就必須遵守NSCopying,并且實(shí)現(xiàn) copyWithZone: 方法,如果想自定義一下mutableCopy 那么就必須遵守NSMutableCopying,并且實(shí)現(xiàn) mutableCopyWithZone: 方法。

方式一:initWithArray: copyItems: 下面先看如何使用 initWithArray: copyItems: 類型方法。使用該方法進(jìn)行深復(fù)制時(shí),第二個參數(shù)為 YES 。

如果對象是單層的(沒有嵌套的模型),此時(shí),model遵循NSCopying,NSMutableCopying協(xié)議,實(shí)現(xiàn)copyWithZone和mutableCopyWithZone方法。

我們知道: 在對象創(chuàng)建的時(shí)候,無論是 alloc 還是 new,都會調(diào)用到 allocWithZone: 方法; 使用拷貝創(chuàng)建對象時(shí),會調(diào)用 copyWithZone:,mutableCopyWithZone:方法; 那么,重寫這些方法,就可以讓創(chuàng)建的對象唯一。

注意,如果想要區(qū)分可變副本和不可變副本,那么copyWithZone:應(yīng)該返回不可變副本,而mutableCopyWithZone:應(yīng)該返回可變副本。

mutableCopyWithZone:.所以我們可以猜測一下, NSObject 的 mutableCopy 方法就是去調(diào)用 mutableCopyWithZone 并返回結(jié)果,如果該類沒有實(shí)現(xiàn) mutableCopyWithZone 方法,則拋出異常。

分享標(biāo)題:ios開發(fā)nscopy iOs開發(fā) af取消下載
本文網(wǎng)址:http://muchs.cn/article8/disehop.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、響應(yīng)式網(wǎng)站、搜索引擎優(yōu)化定制網(wǎng)站、關(guān)鍵詞優(yōu)化品牌網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(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ù)器托管