ios的viewcontroller生命周期是 init -> loadView -> viewDidLoad -> viewWillAppear -> viewDidAppear -> viewWillDisappear -> viewDidAppear -> viewDidUnload -> d ...
ios的viewcontroller生命周期是 init -> loadView -> viewDidLoad -> viewWillAppear -> viewDidAppear -> viewWillDisappear -> viewDidAppear -> viewDidUnload -> dealloc
當我們使用NSNotificationCenter方法,可以在viewDidLoad中添加監聽,在dealloc中remove監聽,但是有的時候我們發現,在退出這個vc的時候,系統不調用dealloc方法,造成這樣的方法可能有以下幾種原因(目前知道的):
1、viewcontroller中存在定時器NSTimer
[self.timer invalidate];//結束定時
self.timer = nil;//nil
2、viewcontroller中有代理Delegate,需要設置delegate的時候,設置為weak
@property (nonatomic,weak) id<WorkHistoryDelegate>delegate;
3、viewcontroller中有Block方法
block會把它裡面的所有對象強引用,包括當前控制器self,因此有可能會出現迴圈引用的問題。比如viewController中有個block屬性,在block中又強引用了self或者其他成員變數,那麼這個viewController與自己的block屬性就形成迴圈引用,導致viewController無法釋放。
__weak typeof(self) weakSelf = self;
[self.tableView tableViewAddUpLoadRefreshing:^{
[weakSelf loadCommentListData];
}];