今天檢測(cè)內(nèi)存泄漏發(fā)現(xiàn)一個(gè)子view不執(zhí)行dealloc方法线欲,查找資料后發(fā)現(xiàn)跟NSTimer有關(guān)明场,做下筆記:
平時(shí)我們用NSTimer時(shí),習(xí)慣在dealloc方法中把它invalidate掉并置nil李丰,但是發(fā)現(xiàn)這樣寫并沒有作用苦锨,NSTimer所在的類并沒有被釋放掉,而是繼續(xù)執(zhí)行NSTimer的方法趴泌。
所以舟舒,我們應(yīng)該在要釋放NStimer所在類之前,invalidate它嗜憔。
1.在UIView中
?可以寫在
- (void)willMoveToSuperview:(UIView *)newSuperview中秃励,這個(gè)方法是把view添加到父控件或從父控件移除掉時(shí)會(huì)調(diào)用。
2.UIViewController中
如果是push在
- (void)willMoveToParentViewController:(UIViewController *)parent 中釋放timer吉捶。
如果是present在
- (void)dismissViewControllerAnimated:(BOOL)flag completion:(void(^)(void))completion 中釋放timer
ps:如果是vc夺鲜,在willDismiss中釋放也行。