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的作用:我的理解就是一个中转站,每个对象都有自己的

  • 相关阅读:
    164 Maximum Gap 最大间距
    162 Find Peak Element 寻找峰值
    160 Intersection of Two Linked Lists 相交链表
    155 Min Stack 最小栈
    154 Find Minimum in Rotated Sorted Array II
    153 Find Minimum in Rotated Sorted Array 旋转数组的最小值
    152 Maximum Product Subarray 乘积最大子序列
    151 Reverse Words in a String 翻转字符串里的单词
    bzoj3994: [SDOI2015]约数个数和
    bzoj 4590: [Shoi2015]自动刷题机
  • 原文地址:https://www.cnblogs.com/zhwl/p/2840722.html
Copyright © 2011-2022 走看看