亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

IOS 常見的循環(huán)引用總結(jié)

 更新時間:2017年03月20日 09:28:28   作者:余成海  
這篇文章主要介紹了IOS 常見的循環(huán)引用總結(jié)的相關(guān)資料,循環(huán)引用,指的是多個對象相互引用時,使得引用形成一個環(huán)形,導(dǎo)致外部無法真正是否掉這塊環(huán)形內(nèi)存。其實(shí)有點(diǎn)類似死鎖,需要的朋友可以參考下

IOS 常見的循環(huán)引用總結(jié)

介紹:

循環(huán)引用,指的是多個對象相互引用時,使得引用形成一個環(huán)形,導(dǎo)致外部無法真正是否掉這塊環(huán)形內(nèi)存。其實(shí)有點(diǎn)類似死鎖。

舉個例子:A->B->C->....->X->B   ->表示強(qiáng)引用,這樣的B的引用計(jì)數(shù)就是2,假如A被系統(tǒng)釋放了,理論上A會自動減小A所引用的資源,就是B,那么這時候B的引用計(jì)數(shù)就變成了1,所有B無法被釋放,然而A已經(jīng)被釋放了,所有B的內(nèi)存部分就肯定無法再釋放再重新利用這部分內(nèi)存空間了,導(dǎo)致內(nèi)存泄漏。

情況一:delegate

Delegate是ios中開發(fā)中最常遇到的循環(huán)引用,一般在聲明delegate的時候都要使用弱引用weak或者assign

@property (nonatomic, weak, nullable) id <UITableViewDelegate> delegate;

當(dāng)然怎么選擇使用assign還是weak,MRC的話只能用assign,在ARC的情況下最好使用weak,因?yàn)閣eak修飾的變量在是否后自動為指向nil,防止不安全的野指針存在

情況二:Block

Block也是比較常見的循環(huán)引用問題,在Block中使用了self容易出現(xiàn)循環(huán)引用,因此很多人在使用block的時候,加入里面有用到self的操作都會聲明一個__weak來修飾self。其實(shí)便不是這樣的,不是所有使用了Block都會出現(xiàn)Self循環(huán)引用問題,只有self擁有Block的強(qiáng)引用才會出現(xiàn)這種情況。

所以一般在函數(shù)中臨時使用Block是不會出現(xiàn)循環(huán)應(yīng)用的,因?yàn)檫@時候Block引用是屬于棧的。當(dāng)棧上的block釋放后,block中對self的引用計(jì)數(shù)也會減掉

當(dāng)然不一定要Self對Block有直接的引用才會出現(xiàn),假如self的變量B,B中有個Block變量,就容易出現(xiàn)這種情況,好的是在block出現(xiàn)循環(huán)引用的,xcode7會出現(xiàn)警告提示(之前版本不確定)。

情況三:NSTimer

這是一個神奇的NSTimer,當(dāng)你創(chuàng)建使用NSTimer的時候,NSTimer會默認(rèn)對當(dāng)前self有個強(qiáng)引用,所有在self使用完成打算是否的時候,一定要先使用NSTimer的invalidate來停止是否時間控制對self的引用

[_timer invalidate];

總結(jié):

上面說的是我們常見的,其實(shí)循環(huán)引用就是說我們的強(qiáng)引用形成了閉環(huán),還會有很多自己寫的代碼中會出現(xiàn),平時還是要注意寫法。當(dāng)然xcode的instruments也能幫助到大家排除一些這樣類似的內(nèi)存問題。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • IOS開發(fā)第三方語音-微信語音

    IOS開發(fā)第三方語音-微信語音

    微信語音開放平臺致力于為開發(fā)者提供免費(fèi)的語音技術(shù),目前已經(jīng)開放的語音技術(shù)包括在線語音識別、在線語音合成等,下面通過本篇文章給大家介紹IOS開發(fā)第三方語言-微信語言,需要的朋友可以一起來學(xué)習(xí)下
    2015-08-08
  • iOS通過多種方式創(chuàng)建控制器

    iOS通過多種方式創(chuàng)建控制器

    這篇文章主要為大家詳細(xì)介紹了iOS通過多種方式創(chuàng)建控制器的相關(guān)方法,感興趣的小伙伴們可以參考一下
    2016-04-04
  • iOS中json解析出現(xiàn)的null,nil,NSNumber的解決辦法

    iOS中json解析出現(xiàn)的null,nil,NSNumber的解決辦法

    在iOS開發(fā)過程中經(jīng)常需要與服務(wù)器進(jìn)行數(shù)據(jù)通訊,Json就是一種常用的高效簡潔的數(shù)據(jù)格式,通過本文給大家介紹iOS中json解析出現(xiàn)的null,nil,NSNumber的解決辦法,感興趣的朋友參考下
    2016-01-01
  • iOS發(fā)送驗(yàn)證碼倒計(jì)時應(yīng)用

    iOS發(fā)送驗(yàn)證碼倒計(jì)時應(yīng)用

    點(diǎn)擊發(fā)送驗(yàn)證碼button。倒計(jì)時開始,這篇文章就為大家詳細(xì)介紹了iOS發(fā)送驗(yàn)證碼倒計(jì)時應(yīng)用的實(shí)現(xiàn)方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • ios動態(tài)設(shè)置lbl文字標(biāo)簽的高度

    ios動態(tài)設(shè)置lbl文字標(biāo)簽的高度

    本文給大家分享的是ios動態(tài)設(shè)置lbl文字標(biāo)簽的高度寬度的方法,一共給大家匯總了3種方法,小伙伴們根據(jù)自己的項(xiàng)目需求自由選擇。
    2015-05-05
  • iOS編程學(xué)習(xí)中關(guān)于throttle的那些事

    iOS編程學(xué)習(xí)中關(guān)于throttle的那些事

    這篇文章主要給大家介紹了關(guān)于iOS編程學(xué)習(xí)中throttle的那些事,文中通過示例代碼介紹的非常詳細(xì),對各位iOS的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • iOS開發(fā)存儲應(yīng)用程序Info.plist知識全面詳解

    iOS開發(fā)存儲應(yīng)用程序Info.plist知識全面詳解

    這篇文章主要為大家介紹了iOS開發(fā)存儲應(yīng)用程序Info.plist知識全面詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • IOS身份證識別(OCR源碼)詳解及實(shí)例代碼

    IOS身份證識別(OCR源碼)詳解及實(shí)例代碼

    這篇文章主要介紹了IOS身份證識別(OCR源碼)詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • IOS筆記061之二維碼的生成和掃描

    IOS筆記061之二維碼的生成和掃描

    隨著移動設(shè)備的普及為二維碼提供了一個很好應(yīng)用平臺,無論是在商城購物還是美食城都離不開二維碼,本篇文章就給大家介紹IOS筆記061之二維碼的生成和掃描,感興趣的朋友可以過來一起學(xué)習(xí)啦,本文內(nèi)容講的很詳細(xì)
    2015-08-08
  • iOS中類似微信紅點(diǎn)顯示功能

    iOS中類似微信紅點(diǎn)顯示功能

    ios中類似微信紅點(diǎn)顯示功能,設(shè)計(jì)思路非常簡單,給UIView增加一個分類 所有的視圖都可以根據(jù)需要來進(jìn)行紅點(diǎn)顯示。下面通過實(shí)例代碼看下實(shí)現(xiàn)方法吧
    2016-12-12

最新評論