zoukankan      html  css  js  c++  java
  • 下面的方式能接收到通知吗?为什么?

    // 接收通知
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleNotification:) name:@"TestNotification" object:@1];
    // 发送通知
    [NSNotificationCenter.defaultCenter postNotificationName:@"TestNotification" object:nil];

    不能

    需要了解通知中心存储通知观察者的结构了,具体如下:

    // 根容器,NSNotificationCenter持有
    typedef struct NCTbl {
      Observation        *wildcard;    /* 链表结构,保存既没有name也没有object的通知 */
      GSIMapTable        nameless;    /* 存储没有name但是有object的通知    */
      GSIMapTable        named;        /* 存储带有name的通知,不管有没有object    */
        ...
    } NCTable;
    
    // Observation 存储观察者和响应结构体,基本的存储单元
    typedef    struct    Obs {
      id        observer;    /* 观察者,接收通知的对象    */
      SEL        selector;    /* 响应方法        */
      struct Obs    *next;        /* Next item in linked list.    */
      ...
    } Observation;

    nameless与named的具体数据结构如下:

    image.png

    image.png

    如上图所示,当添加通知监听的时候,我们传入了name和object,所以,观察者的存储链表是这样的:

    named表:key(name):value->key(object):value(Observation)

    因此在发送通知的时候,如果只传入name而并没有传入object,是找不到Observation的,也就不能执行观察者回调

    在北京的灯中,有一盏是我家的。这个梦何时可以实现?哪怕微微亮。北京就像魔鬼训练营,有能力的留,没能力的走……
  • 相关阅读:
    1031.查询-集合操作
    1030.查询-select子句
    1029.查询-复杂分组grouping子句
    1028.查询-group by和having子句
    1027.查询-where子句
    1026.查询-from子句2
    1025.查询-from子句
    1024.查询-概述
    1023.表-数据操作
    图片隐写之stegsolve使用(转载)
  • 原文地址:https://www.cnblogs.com/huangzs/p/14481331.html
Copyright © 2011-2022 走看看