黑马程序员-5.通知机制(Notification)

通知时最近才学到的一个机制,只在文本框内容改变的时候才用的,不是很熟,但是很有用,主要时作用在M和C之间,上面的delegate主要作用在M和V之间。

通知(notifacation)是非常好的一种机制,它可以对消息进行广播。特别是想要传递丰富的信息,并且不一定指望有谁对此消息关心。

通知可以用来发送任意的消息,甚至包含一个userInfo字典,或者是NSNotifacation的一个子类。通知的独特之处就在于发送者和接收者双方并不需要相互知道。这样就可以在非常松耦合的模块间进行消息的传递。记住,这种消息传递机制是单向的,作为接收者是不可以回复消息的。

每一个应用程序都有一个通知中心(NSNotificationCenter)实例,专门负责协助不同对象之间的消息通信。

  任何一个对象都可以向通知中心发布通知(NSNotification),描述自己在做什么。其他感兴趣的对象(Observer)可以申请在某个特定通知发布时(或在某个特定的对象发布通知时)收到这个通知!

  

通知中心(NSNotificationCenter)提供了方法来注册一个监听通知的监听器(Observer)

  - (void)addObserver:(id)observer selector:(SEL)aSelector name:(NSString *)aName object:(id)anObject;

//observer:监听器,即谁要接收这个通知

  //aSelector:收到通知后,回调监听器的这个方法,并且把通知对象当做参数传入

  //aName:通知的名称。如果为nil,那么无论通知的名称是什么,监听器都能收到这个通知

  //anObject:通知发布者。如果为anObject和aName都为nil,监听器都收到所有的通知

  - (id)addObserverForName:(NSString *)name object:(id)obj queue:(NSOperationQueue *)queue usingBlock:(void (^)(NSNotification *note))block;

  //name:通知的名称

  //obj:通知发布者

  //block:收到对应的通知时,会回调这个

  //blockqueue:决定了block在哪个操作队列中执行,如果传nil,默认在当前操作队列中同步执行

  

通知

  一个完整的通知一般包含3个属性:

  - (NSString *)name; // 通知的名称

  - (id)object; // 通知发布者(是谁要发布通知)

  - (NSDictionary *)userInfo; // 一些额外的信息(通知发布者传递给通知接收者的信息内容)

  初始化一个通知(NSNotification)对象

  + (instancetype)notificationWithName:(NSString *)aName object:(id)anObject;

  + (instancetype)notificationWithName:(NSString *)aName object:(id)anObject userInfo:(NSDictionary *)aUserInfo;

  - (instancetype)initWithName:(NSString *)name object:(id)object userInfo:(NSDictionary *)userInfo;

  

发布通知

  通知中心(NSNotificationCenter)提供了相应的方法来帮助发布通知

  发布一个notification通知,可在notification对象中设置通知的名称、通知发布者、额外信息等

  - (void)postNotification:(NSNotification *)notification;

  发布一个名称为aName的通知,anObject为这个通知的发布者

  - (void)postNotificationName:(NSString *)aName object:(id)anObject;

  发布一个名称为aName的通知,anObject为这个通知的发布者,aUserInfo为额外信息

  - (void)postNotificationName:(NSString *)aName object:(id)anObject userInfo:(NSDictionary *)aUserInfo;

时间: 2024-11-04 12:42:04

黑马程序员-5.通知机制(Notification)的相关文章

黑马程序员_Java反射机制

一切的操作都将使用Object完成,类,数组的引用都可以使用Object来接收 1,认识Class类 以前要是想知道一个类中的属性,成员变量,方法等等的信息的话,需要通过new这个类的对象才能得到这些信息,但是在Java中,也允许一个实例化对象找到一个类的完整的信息,这个类就是Class类,Class类是继承Object类的. 正常方式:  引入需要的"包.类"名称 >取得实例化对象 反射方式:  实例化对象>得到完整的"包.类"名称 getClass(

黑马程序员_类加载机制

------- android培训.java培训.期待与您交流! ---------- 0.类加载机制知识体系 1.类与JVM进程 使用Java命令运行某个Java程序时,此命令会启动一个Java虚拟机进程,不管Java程序多复杂,开启了多少个线程,这个线程都运行在Java虚拟机进程里.同一个JVM的所有线程.所有变量都处于同一个进程里,都使用该JVM进程的内存区. 只有出现下列情况时,JVM进程才会终止: 1)程序正常结束. 2)程序执行到代码System.exit()或Runtime.get

黑马程序员---java反射机制的实现原理

------- android培训.java培训.期待与您交流! ---------- 反射机制就是java语言在运行时拥有一项自观的能力. 通过这种能力可以彻底的了解自身的情况为下一步的动作做准备. 下面具体介绍一下java的反射机制.这里你将颠覆原来对java的理解. Java的反射机制的实现要借助于4个类:class,Constructor,Field,Method: 其中class代表的时类对象, Constructor-类的构造器对象, Field-类的属性对象, Method-类的方

黑马程序员___java反射机制

 ----------- android培训.java培训.java学习型技术博客.期待与您交流! --------- Java的反射机制的实现要借助于4个类:class,Constructor,Field,Method:其中class代表的时类对 象,Constructor-类的构造器对象,Field-类的属性对象,Method-类的方法对象.通过这四个对象我们可以粗略的看到一个类的各个组 成部分.Class:程序运行时,java运行时系统会对所有的对象进行运行时类型的处理.这项信息记录了每个

黑马程序员_异常处理机制

???????????????????????????????-----Java培训.Android培训.iOS培训..Net培训.期待与您交流! 异常 异常 ??? 异常就是程序在运行时产生的异常情况. 异常的由来 ??? 问题也是现实生活中的具体事物,也可以通过java 类的形式进行描述,并封装成对象.异常就是java 对不正常情况进行描述后的对象的体现. 异常体系 ??????? Throwable ??????????? |--Error ??????????? |--Exception

黑马程序员---Java反射机制学习

由现在这个时间补上反射机制的学习笔记,本想报20期的JavaEE班,无奈真担心自己过不去,所以这段时间,一直的复习现在改报21期的吧!! 准备知识:一 1.Java的反射机制的实现要借助于4个类:class,Constructor,Field,Method:    其中class代表的时类对象,    Constructor-类的构造器对象,    Field-类的属性对象,    Method-类的方法对象. 2.在Java中,每个class都有一个相应的Class对象.也就是说,当我们编写一

黑马程序员——基础加强篇

------- android培训.java培训.期待与您交流! ---------- MyEclipse相关知识 Workspace与project 切换工作空间:File---Switch Workspace---Other 一个工作间包含多个工程,切换工作间之后,会影响里面的工程,例如快捷键什么的都要重新配置如果重新配了之后快捷键还没有用就要考虑下那个快捷键是不是冲突了    视图管理与程序调试 可以通过Window---Show View来添加各种透视图. 调试程序的时候可以在代码右边双

黑马程序员——餐桌上的多线程

餐桌上的多线程问题 生产者和消费者模型 设想有一天你和一群朋友去餐馆吃饭,这是个典型的同步例子,你和你的朋友们共享着餐桌这个资源.想象一下,当你举起筷子准备夹菜的时候,却发现菜碟子被人端走了~这正是同步要解决的问题,必须保证在某人夹菜的时候,其他人不能把菜盘子端走.Java中使用加锁的机制,使用Synchronized来保证代码执行的时候不受共享资源的其他人的干扰. 而餐厅的服务员根据你的订单给你上菜,当菜吃完了通知服务员给你们上菜,这又是个典型的生产者消费者模型.下面用内部类简单实现下这个问题

跟黑马程序员一起玩转Android N

北京时间5月19号凌晨1点,Google在美国加州山景城举办了2016年的I/O开发者大会.这是一场面向全世界开发者介绍系统.软件更新的盛会.今年的I/O大会Google推出了众多新产品,包括Android N(7.0).智能穿戴AndroidWear2.0.智能家居.VR虚拟现实等等. 虽说整个大会的重心偏向了人工智能(Google assistant.Allo&Duo .Google Home),但Android操作系统作为智能设备的"核心"(Android系统从手表.手机