iOS----------viewcontroller中的dealloc方法不調用

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,weakid<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];

 

    }];

相關文章
相關標籤/搜索