`

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

分享到:
评论

相关推荐

    delegate、NSNotification、block比较

    在iOS和macOS开发中,`delegate`、`NSNotification`和`block`是三种常见的对象间通信机制。它们各自有着不同的特性和应用场景,理解这些差异对于优化代码结构和提高程序性能至关重要。 首先,我们来看看`delegate`...

    iOS开发之通知NSNotificationDemo

    在iOS开发中,NSNotification是Objective-C中的一个关键概念,它属于Foundation框架,用于对象间通信。NSNotification机制允许对象广播消息给其他对象,而无需这些对象之间有直接的引用关系,这种设计模式被称为发布...

    IOS NSNotification 键盘遮挡问题的解决办法

    为了解决这个问题,我们可以利用NSNotification来监听键盘的显示和隐藏,从而调整界面布局,确保内容始终可见。本文将详细介绍如何通过NSNotification解决iOS中的键盘遮挡问题。 首先,我们需要了解键盘的通知类型...

    快速,强类型,易使用的消息总线,兼容NSNotification.zip

    QTEventBus是一个开源项目,设计目标是为iOS应用提供一个快速、强类型且易于使用的消息总线,同时兼容苹果的NSNotification机制。消息总线是一种设计模式,它允许应用程序中的组件之间进行松散耦合的通信,而无需...

    iOS 中KVC、KVO、NSNotification、delegate 总结及区别

    iOS开发中,KVC(Key-Value Coding)、KVO(Key-Value Observing)、NSNotification和Delegate是四种常见的数据通信和状态监听技术。下面将详细解释这些概念及其区别。 1. KVC(Key-Value Coding) KVC是Objective-...

    ObserverKit:一个使用 UIControl、NSNotification、Key Value Observing 的简单库。

    一个简单的库,用于使用 UIControl、NSNotification、Key Value Observing... ##Install with CocoaPod pod 'ObserverKit' 和 #import "OKObserver.h" #import "NSObject+OKObserver.h" // Optional ##例子 ...

    SRGModelEvent:SRGModelEvent 是 NSNotification 的瘦包装库,可以更轻松地观察您的模型

    SRGModelEvent 是 NSNotification 的瘦包装库,可以更轻松地观察/通知您的模型。 安装 将以下行添加到您的 podfile 并运行pod update 。 pod 'SRGModelEvent' 用法 首先你需要包含头文件。 # import " ...

    NSNotificationCenter详解

    NSNotification是iOS开发中一个至关重要的概念,它是Apple的Foundation框架的一部分,用于在应用程序的不同组件之间进行松耦合的通信。NSNotification允许对象发送消息(被称为通知)到其他对象,而无需直接知道接收...

    iPhone编程的通知例子

    本示例项目“iPhone编程的通知例子”旨在讲解如何利用NSNotification机制和Delegate模式来实现这种通信。这两种方法都是Objective-C语言中核心的特性,对于理解和创建功能丰富的iOS应用程序至关重要。 首先,我们来...

    iOS NSNotificationCenter通知中心使用小结

    iOS中的NSNotification中心是一个重要的通信机制,它允许对象间进行松耦合的消息传递。NSNotification与Delegate都是iOS中常见的消息传递方式,它们各有特点和适用场景。 首先,我们来看看NSNotification和Delegate...

    ios-对NSNotificationCenter的封装.zip

    在iOS开发中,NSNotification是Objective-C中的一个关键概念,它用于在对象之间进行解耦通信。这个`ios-对NSNotificationCenter的封装.zip`文件提供了一个针对NSNotification的封装,目的是简化使用过程,增强代码的...

    ios-NotificationHelper.zip

    在iOS开发中,NSNotification是Objective-C中的一个关键组件,它用于在对象之间传递消息,无需直接耦合。NotificationHelper是对NSNotification中心的封装,旨在简化通知的注册、发布和取消订阅流程,同时也解决了...

    注册通知中心实现视图间数据传递

    苹果提供了多种方式来实现这一目标,其中包括代理、KVO(Key-Value Observing)、Block以及NSNotification。本教程将重点讨论如何使用NSNotification来实现在不同视图间的数据传递,作为博客中介绍的四种方法的补充...

    AutoRemoveObserverDemo:自动删除NSNotificationCenter观察器的演示

    自动释放NSNotification的Observer的实验 实验了几种做法,其中二和三可以实现, 但仅粗略验证, 可能有未知的问题. ####一、@妙玄 提供思路:外层包装一个Wrapper对象来感知Observer的释放,通过Wrapper对象来移除通知....

    UI界面之间的值传递

    本篇文章将详细探讨四种常见的UI界面间值传递方法:Key-Value Observing (KVO)、协议代理、单例模式以及NSNotification。 首先,Key-Value Observing(KVO)是一种对象监听另一对象属性变化的方法。在`QQLogin_4...

    (OC)监听的使用.zip

    "监听"这个概念在OC中通常指的是对象间的消息传递和响应机制,也就是KVO(Key-Value Observing)和通知(NSNotification)。这两种机制允许一个对象监听另一个对象的属性变化或者特定事件的发生,并在这些变化或事件...

    beamOff,MAC优化必备

    - (void)applicationDidFinishLaunching:(NSNotification *)aNotification { int mode = disableBeamSync; CGSSetDebugOptions(mode ? 0 : 0x08000000); CGSDeferredUpdates(mode); [self.window close]; ...

Global site tag (gtag.js) - Google Analytics