iOS 代理修飾詞weak 不用assgin

昨天被一個bug 坑了下。先描述下場景:
首頁列表頁點進去是詳情,裏面有個精確到秒的倒計時,並且滑動的時候倒計時也在走,就把它放在 [NSRunLoop mainRunLoop] 裏面了。看到詳情後又返回首頁,之後倒計時結束要走個代理方法。突然就崩潰。。。。

Cannot form weak reference to instance (0x10ef21e00) of class JieBanDetailVC. It is possible that this object was over-released, or is in the process of deallocation.

因爲是修改別人的bug 沒有注意他的代理使用assign.

理解:進到詳情界面 NSTimer 就被加到 [NSRunLoop mainRunLoop] 裏面了,因爲 [NSRunLoop mainRunLoop] 是全局存在的,即使回到首頁當到計時結束時也會走代理方法,這時候就爆炸了。。這時候就充分體現了weak 和assign 的區別。雖然都是弱引用的修飾詞。

weak 當計數器爲0 時對象被釋放,地址指針就置爲了nil 了。
assign 當計數器爲0 時 對象被釋放,地址指針還是指向那個地址,就會產生野指針

發佈了45 篇原創文章 · 獲贊 39 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章