NSNotification学习笔记

这是一个观察者模式。
首先在你需要监听的类中加入观察者:
- (void)addObserver:(id)observer selector:(SEL)aSelector name:(NSString *)aName object:(id)anObject;
这个观察者在监听到anObject发送名字为aName的notification时,调用selector的方法,在aSelector方法中得到userInfo。
anObject表示从谁那儿发送出来的消息。
一般的selector中的方法可以这么写:
- (void)method: (NSNotification:)sender
{
    NSDictionary *dict = [sender userInfo];
}
也就是说监听到了anObject发出消息,消息的名字是aName,此时observer就调用aSelector方法,把notification的userInfo拷贝到本地。

然后在被监听的类中发送通知:
可以使用一下三个方法:
- (void)postNotification:(NSNotification *)notification;
- (void)postNotificationName:(NSString *)aName object:(id)anObject;
- (void)postNotificationName:(NSString *)aName object:(id)anObject userInfo:(NSDictionary *)aUserInfo;
anObject表示谁发送了这个消息。
第一个方法直接把定义好的notification发出,notification的初始化方法如下:
+ (id)notificationWithName:(NSString *)aName object:(id)anObject userInfo:(NSDictionary *)userInfo 
第二个方法只定义了消息名和发消息者,没有传递实际的参数,貌似也可以把anObject自身作为消息传递出去,这个还没有搞懂。差不多就是作为observer可以回调poster。
第三个方法指定消息名称,发消息者,并且传递了userInfo。也就相当于初始化了一个notification,并且用第一个方法发出。

如果object:nil表示以广播方式发消息或者得到消息,这个时候只要消息名字是对的就可以得到这个消息。
object:用来表示 谁发送的消息,或者从谁得到消息。
参数应该在userInfo里面传递。
NSNotification的作用是在同一程序的不同类中传递参数,传递的方法是把参数放在NSDictionary类型的userInfo中。




NSNotification

通知中心传值,可以跨越多个页面传值, 一般也是从后面的页面传给前面的页面。

思路:
第三个界面的值传给第一个界面。
1. 在第一个界面建立一个通知中心, 通过通知中心,注册一个监听事件

2. 在第一个界面中,设置接收到通知的事件。

3. 在第一个界面中的dealloc中, 将通知中心remove掉

4. 在第三个界面中, 建立一个通知中心, 通过通知中心, 发送通知(发送通知的过程就是传值的过程,将要传输的值作为object的值传给第一个界面 

代码片段:
第一界面:
     //通知中心是个单例
     NSNotificationCenter *notiCenter = [NSNotificationCenter defaultCenter];

     // 注册一个监听事件。第三个参数的事件名, 系统用这个参数来区别不同事件。
     [notiCenter addObserver:self selector:@selector(receiveNotification:) name:@"cesuo" object:nil];

     // @selector(receiveNotification:)方法, 即受到通知之后的事件
     - (void)receiveNotification:(NSNotification *)noti
{
   
     // NSNotification 有三个属性,name, object, userInfo,其中最关键的object就是从第三个界面传来的数据。name就是通知事件的名字, userInfo一般是事件的信息。
    NSLog(@"%@ === %@ === %@", noti.object, noti.userInfo, noti.name);

 }
     
     // 第一界面中dealloc中移除监听的事件
- (void)dealloc
{
    // 移除当前对象监听的事件
    [[NSNotificationCenter defaultCenterremoveObserver:self];
    [super dealloc];
    
}

第二界面: 
     // 创建一个通知中心
         NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
     
     // 发送通知. 其中的Name填写第一界面的Name, 系统知道是第一界面来相应通知, object就是用来表示 谁发送的消息,或者从谁得到消息。。 UserInfo是一个字典, 如果要用的话,提前定义一个字典, 可以通过这个来实现多个参数的传值使用。

         [center postNotificationName:@"cesuo" object:@"zhangheng" userInfo:dic];

你可能感兴趣的:(NSNotification,ios通知,iOS通知传值,IOS)