ios在UIViewController中不走dealloc或者導致Memory Leak的原因,

來源:互聯網
上載者:User

ios在UIViewController中不走dealloc或者導致Memory Leak的原因,

自從項目中匯入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;

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.