ios的viewcontroller生命週期是 init -> loadView -> viewDidLoad -> viewWillAppear -> viewDidAppear -> viewWillDisappear -> viewDidAppear -> viewDidUnload -> deallocios
當咱們使用NSNotificationCenter方法,能夠在viewDidLoad中添加監聽,在dealloc中remove監聽,可是有的時候咱們發現,在退出這個vc的時候,系統不調用dealloc方法,形成這樣的方法可能有如下幾種緣由(目前知道的):app
一、viewcontroller中存在定時器NSTimeratom
[self.timer invalidate];//結束定時spa
self.timer = nil;//nil代理
二、viewcontroller中有代理Delegate,須要設置delegate的時候,設置爲weak對象
@property (nonatomic,weak) id<WorkHistoryDelegate>delegate;生命週期
三、viewcontroller中有Block方法rem
block會把它裏面的全部對象強引用,包括當前控制器self,所以有可能會出現循環引用的問題。好比viewController中有個block屬性,在block中又強引用了self或者其餘成員變量,那麼這個viewController與本身的block屬性就造成循環引用,致使viewController沒法釋放。it
__weak typeof(self) weakSelf = self;io
[self.tableView tableViewAddUpLoadRefreshing:^{
[weakSelf loadCommentListData];
}];