什么情況使用weak關(guān)鍵字,相比assign有什么不同?

1.在ARC模式下,在有可能出現(xiàn)循環(huán)引用時(shí),讓其一端使用weak修飾。例如:delegate(代理)屬性
2.自身已經(jīng)對它強(qiáng)引用一次了,沒有必再強(qiáng)引用一次使用weak解決。例如:自定義IBOutlet控件屬性

  • 兩者區(qū)別:
    1.weak只能用于修飾對象類型,基本數(shù)據(jù)類型不能使用
    2.assign修飾對象和基本數(shù)據(jù)類型都可以,但是只是簡單地進(jìn)行賦值操作而已

注意:assign修飾的對象(一般編譯的時(shí)候會(huì)產(chǎn)生警告:Assigning retained object to unsafe property; object will be released after assignment)在釋放之后,指針的地址還是存在的,也就是說指針并沒有被置為nil,造成野指針。對象一般分配在堆上的某塊內(nèi)存,如果在后續(xù)的內(nèi)存分配中,剛好分到了這塊地址,程序就會(huì)崩潰掉。
那為什么可以用assign修飾基本數(shù)據(jù)類型?因?yàn)榛A(chǔ)數(shù)據(jù)類型一般分配在棧上,棧的內(nèi)存會(huì)由系統(tǒng)自己自動(dòng)處理,不會(huì)造成野指針。
weak修飾的對象在釋放之后,指針地址會(huì)被置為nil。所以現(xiàn)在一般弱引用就是用weak。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容