// 发送通知
[[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的具体数据结构如下:


如上图所示,当添加通知监听的时候,我们传入了name和object,所以,观察者的存储链表是这样的:
named表:key(name):value->key(object):value(Observation)
因此在发送通知的时候,如果只传入name而并没有传入object,是找不到Observation的,也就不能执行观察者回调