真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

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

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

讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:國際域名空間、網(wǎng)絡(luò)空間、營銷軟件、網(wǎng)站建設(shè)、靈石網(wǎng)站維護、網(wǎng)站推廣。

介紹:

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

舉個例子:A->B->C->....->X->B   ->表示強引用,這樣的B的引用計數(shù)就是2,假如A被系統(tǒng)釋放了,理論上A會自動減小A所引用的資源,就是B,那么這時候B的引用計數(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  delegate;

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

情況二:Block

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

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

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

情況三:NSTimer

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

[_timer invalidate];

總結(jié):

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

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


網(wǎng)站名稱:IOS常見的循環(huán)引用總結(jié)
標題來源:http://weahome.cn/article/pcishs.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部