iOS viewcontroller中的dealloc方法不調用

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

    }];




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章