在視圖控制器中的一段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中循環引用問題,從而避免對象無法得到釋放。