iOS中通知的添加和移除

  咱们都知道viewWillAppear:方法是在控制器的view将要显示的时候调用的,而viewWillDisappear:方法是在控制器的view将要隐藏的时候调用。不少时候咱们根据自身须要将相关代码逻辑添加到这两个方法中。app

  如今随着手势操做的流行,不少人在页面中添加了左滑返回的功能,可是咱们仍是习惯性的把通知的移除放在了viewWillDisappear中,这样就会出现一个问题,若是我左滑滑到一半又滑回去了,这时候页面的通知已经移除了,总体的功能就会受到影响。指针

  解决方法:io

    一、将注册通知的方法放到viewDidLoad中;只要页面有变化就会调用这个方法,页面的通知监听就会一直存在。方法

    二、将移除通知的代码放到dealloc方法中,dealloc方法是在控制器销毁之时调用的。这个时候移除通知而不是在viewWillDisappear:方法中移除能够有效避免上述的问题。既然控制器都销毁了,那么还留着相关的通知干吗?该移除的移除。总结

 

  上面的两种解决方案,要说哪一种最优,那确定非第二种莫属了。view

   在这里能够举个例子。假如咱们如今有这么个场景:在控制器的view上有个label,在label上添加一个手势(通常手势都是在建立完label以后添加的),假设我在viewWillDisappear:方法中移除该手势,则此时用户侧滑返回之时又取消侧滑返回,那么原先在label上的手势却再也添加不回来了(这里label通常在viewDidLoad方法中建立),由于viewDidLoad方法不会再次调用。而第二种方法却能够有效避免这种状况,这样就能够避免我这种“手贱”的任意捣鼓了,是否是很完美呢?vi

   注意项:解决方案

    用 [NSNotificationCenter defaultCenter] 发出的通知在控制器里面接收不用理会,控制器销毁的时候会自动释放不会野指针,可是在view里面接收通知的时候要在dealloc里面移除,不然会野指针。习惯

  

  总结:ab

  一、iOS7新增长了导航控制器侧滑手势,当触发侧滑返回时,会调用系统的viewWillDisappear:方法,取消侧滑返回时又会调用viewWillAppear:方法。

 

  二、在作手势和通知等一系列操做之时尽可能在dealloc方法中执行,添加通知尽可能在viewDidLoad等一次性方法中执行。

 

  三、在viewWillAppear:、viewWillDisappear:、viewDidAppear:、viewDidDisappear:等相似于这种会屡次调用的系统方法中添加代码时,必定要多考虑业务逻辑,以避免出现没必要要的麻烦。

相关文章
相关标签/搜索