zoukankan      html  css  js  c++  java
  • 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中。

    NSNotificationCenter的作用:我的理解就是一个中转站,每个对象都有自己的

    转载自:http://no001.blog.51cto.com/1142339/637532

  • 相关阅读:
    JAVA for(i = 0; i<a.length; i++) 解析
    3.2.2多维数组 3.3 排序
    3.2数组
    字符串和数组
    2.7.3与程序转移有关的跳转语句
    2.7.2 循环语句
    读书共享 Primer Plus C-part 4
    Linux 批量修改文件名
    关于/usr/local/lib/libz.a(zutil.o): relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC解决办法
    做一个有深度的程序猿
  • 原文地址:https://www.cnblogs.com/wyqfighting/p/3222398.html
Copyright © 2011-2022 走看看