美文网首页
关于NSNotificationCenter的一些见解

关于NSNotificationCenter的一些见解

作者: 流年划过颜夕 | 来源:发表于2017-08-22 15:44 被阅读22次

最近app中加了很多通知,但误用通知会导致方法多次调用等各种问题,为了研究透通知的处理机制,举了几个例子来讲解。
为了深入了解通知的处理机制,首先我们要明白控制器的生命周期(调用先后顺序如下):
载入完成,可以进行自定义数据以及动态的创建其他空间:

  • (void)viewDidLoad
    视图将出现在屏幕之前:
  • (void)viewWillAppear:(BOOL)animated
    视图在屏幕上渲染完成:
  • (void)viewDidAppear:(BOOL)animated
    视图被移除之前
  • (void)viewWillDisappear:(BOOL)animated
    视图被移除完成
  • (void)viewDisappear:(BOOL)animated
    销毁视图
  • (void)dealloc

值得注意的是:
-(void)viewDidLoad 只会在控制器初始化时载入一次,
-(void)dealloc也只会在控制器销毁时载入一次.
而其他四个方法可以根据多个视图控制器切换时多次调用.
所以通知的业务逻辑可以根据以上进行合理的调度。
 
关于通知的注册和移除
有人喜欢方法一:

  • (void)viewWillAppear:(BOOL)animated注册通知
  • (void)viewWillDisappear:(BOOL)animated移除通知
    也有人喜欢方法二
  • (void)viewDidLoad 注册通知,
  • (void)dealloc移除通知. 
    其实这都是需要根据业务逻辑来处理的,并不能一概而论。
    例如:
    在大厅中监听房间的创建和销毁,可以初始化时就开启监听,作为最底层的控制器即可选择方法二。
    而在一些权限界面,比如玩家达成一定条件才开启的,可以采用方法一。
    甚至可以不局限于这些地方,只要方法适当可以在任何地方注册和销毁,当然注册了通知后,移除对应的通知也是必要的。

还有一些问题:
当在某个控制器不小心一次性注册几次通知:

-(void)viewDidLoad {

[super viewDidLoad];
[[NSNotificationCenter defaultCenter]      addObserver:self
                                              selector:@selector(father)
                                                  name:@"father"
                                                object:nil];
[[NSNotificationCenter defaultCenter]      addObserver:self
                                              selector:@selector(father)
                                                  name:@"father"
                                                object:nil];

}

你就可能会接收到同样多的信息:
2017-08-22 15:30:32.060 MyFrameWork[10504:299552] father
2017-08-22 15:30:33.172 MyFrameWork[10504:299552] father
但是移除通知只需要移除一次即可:
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"father" object:nil];

另一方面,如果基类里面注册了通知,最好选择在基类的
-(void)viewDidLoad中注册。

其实会用通知后,开发就很方便了,特别是用于基于sokect的编程中,不断地和服务器进行交互,需要分发好服务器推送过来的信息,不然就可能造成信息错乱,内存异常等问题。

相关文章

  • 关于NSNotificationCenter的一些见解

    最近app中加了很多通知,但误用通知会导致方法多次调用等各种问题,为了研究透通知的处理机制,举了几个例子来讲解。为...

  • 关于开会的一些见解

    关于开会的一些见解 不知道你有没有被开会时间太长所困扰,每个人都想着早点结束,每个人却都各抒己见,最后开了慢长而无...

  • 关于动画的一些见解

    Animator 关系 介绍几个开源动画库 1、2017年酷炫的动画库https://blog.csdn.net/...

  • 关于学识的一些见解

    随便聊一下,学识这二个字可以拆开看一个学字一个识字,个人觉得这两个字的话还是有很大区别的,学主要是技能的传承比如...

  • 关于旅游的一些见解

    1、旅游的目的 旅游,说的直白些,就是出去玩。每个人出来的目的都不同的,就像这次,我和姐、姐夫和四岁的侄女一行在...

  • 关于演员的一些见解

    最近忙着看《康熙微服私访记》,之所以忙是因为确实忙中偷闲,可能这部电视剧有点老,但是每每背景音乐响起的时候不经...

  • 关于炒股的一些见解

    昨天去理发了,理完发就感觉自己又丑了,现在的体重是155斤,而我又是理的短发,我的整张脸显得有点胖,而且我的皮肤也...

  • 关于跑步的一些见解

    早上刷抖音的时候,无意中刷到跑步,然后又点开了评论然后看到半马,继续点进去看了一下,跑半马是要跑21公里。 我在想...

  • 关于[NSNotificationCenter defaultC

    1.[NSNotificationCenter defaultCenter] addObserver:self s...

  • 关于 [[NSNotificationCenter defaul

    一定要执行, 不仅仅是代码规范 否则有可能在 iPad 上野指针

网友评论

      本文标题:关于NSNotificationCenter的一些见解

      本文链接:https://www.haomeiwen.com/subject/ddrldxtx.html