天天看點

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

    }];

轉載于:https://www.cnblogs.com/KiVen2015/p/9389329.html