ios在UIViewController中不走dealloc或者導致Memory Leak的原因 – iPhone手機開發 iPhone軟體開發教學課程

自從項目中導入MyLeaksFinder以來,項目中就經常會報Memory Leak的提示,經過幾次調試終於總結到這種情況可能出現的幾種原因:

1,VC中使用瞭NSTimer計時器,使用計時器當VC進行push ——pop之後,如果NSTimer對象沒有進行銷毀,就會造成內存泄漏,也就是引用瞭當前VC,導致控制器的引用計數加1,如果沒有將這個NSTimer 銷毀,它將一直保留該VC,無法釋放,也就不會調用dealloc方法。所以,需要在viewWillDisappear之前需要把控制器用到的NSTimer銷毀。

銷毀方法:[timer invalidate]; // 銷毀timer

timer = nil; // 置nil

或者在GCD中的銷毀方法:

dispatch_source_cancel(_timer);

2,Block代碼塊中使用瞭強引用self,容易造成循環引用,對象長時間不能釋放而引起的。

具體可以:

#define WS(weakSelf)? __weak __typeof(self)weakSelf = self;

使用弱引用weakSelf來代替self,

或者項目在回調代碼塊中調用內部成員變量及屬性時的self.name或者_name都會引起循環引用,具體方法同上。

3,就是可能在項目VC中采用的代理方法屬性的代理不是weak屬性具體的方法如下:

:@property (nonatomic, weak) id delegate;

剩下具體還可能造成的原因還在進一步探索中,如果有新的可能造成的原因也歡迎大傢在評論區補充

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *