什么情況使用weak關鍵字,相比assign有什么不同?

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

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

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容