iOS通知的一个坑

今天在一个控制器里面写一个通知接收函数

[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(action:) name:@"ntfName" object:nil];```
但是写在了`ViewDidLoad`里面了,一般情况下这是没有问题的,但是如果你这个页面会重复出现并成为`window`的`rootViewController`的话,那就问题大了。因为没出现一次,这个通知就会注册一次,最后造成的后果就是你的通知响应函数会执行n次,是不是非常蛋疼,网上有好多人说卸载`dealloc`里面,但是一般ARC的工程基本不会执行这个函数。
所以解决办法就是把上面的接收通知的函数写在页面出现的函数里
  • (void)viewDidAppear:(BOOL)animated{
    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(action:) name:@"ntfName" object:nil];
    }```
    之后在页面消失的时候移除通知的观察者
- (void)viewWillDisappear:(BOOL)animated{
    [[NSNotificationCenter defaultCenter]removeObserver:self];
}```
一般情况下是遇不到这个坑的,但是如果发现你的通知响应函数重复执行,那么这个解决办法可能会帮到你。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,315评论 25 708
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,211评论 30 472
  • 念念不忘是归年 耳融目染是留念 可我只像个神经病一般 总挂念着回不到的那一年 答非所问已变迁 雁字回时已千年 三生...
    疯左阅读 195评论 2 5
  • 春暖花开_jing阅读 166评论 0 0
  • 这里的Unsafe并不是我们常说的Java自带的sun.misc.Unsafe,而是io.netty.channe...
    三斤牛肉阅读 2,054评论 0 0