8.block中使用self的循環引用問題

      在視圖控制器中的一段block中使用self時,例如賦給delegate等,這種情況會造成循環引用,這樣該視圖控制器無法得到釋放。解決方法是在block中聲明self爲弱引用,以下是兩種聲明爲弱引用的方法:

__unsafe_unretained NJShareViewController *unsafeSelf = self;
    
    __weak NJShareViewController *unsafeSelf = self;
//    __weak 當對象釋放之後會自動設置爲nil, 而__unsafe_unretained不會

      還有一種聲明方法,可以動態檢查self的類型進行聲明,比較通用:

    __weak typeof(self) unsafeSelf = self;
//    typeof(int) a = 10; // == int a = 10;

      通過以上幾種方法就可以解決block中循環引用問題,從而避免對象無法得到釋放。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章