_weak typeof(self) weakSelf = self;

_weak typeof(self) weakSelf = self; 
(一)內存管理原則 
一、默認strong,可選weak。strong下無論成員變量仍是property,每次使用指針指向一個對象,等於自動調用retain(), 並對舊對象調用release(),因此設爲nil等於release。 
二、只要某個對象被任一strong指針指向,那麼它將不會被銷燬,不然當即釋放,不用等runloop結束。全部strong指針變量不須要在dealloc中手動設爲nil,ios會自動處理,debug能夠看到所有被置爲nil,最早聲明的變量最後調用dealloc釋放。ios

三、官方建議IBOutlet加上__weak,實際上不用加也會自動釋放;函數

四、優先使用私有成員變量,除非須要公開屬性才用property。oop

五、避免循環引用,不然手動設置nil釋放。debug

六、block方法經常使用聲明:@property (copy) void(^MyBlock)(void); 若是超出當前做用域以後仍然繼續使用block,那麼最好使用copy關鍵字,拷貝到堆區,防止棧區變量銷燬。指針

七、建立block匿名函數以前通常須要對self進行weak化,不然形成循環引用沒法釋放controller:code

__weak MyController *weakSelf = self 或者 __weak __typeof(self) weakSelf = self;
執行block方法體的時候也能夠轉換爲強引用以後再使用:MyController* strongSelf = weakSelf; if (!strongSelf) { return; }
相關文章
相關標籤/搜索