OC_NSNotificationCenter

本文详细介绍了NSNotifcationCenter的原理和使用方法,包括如何注册、激发和移除广播,以及其在程序内部提供的广播机制,适用于两个无直接引用关系的对象间通信。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

NSNotificationCenter的介绍

NSNotificationCenter实际是在程序内部提供了一种广播机制。把接收到的消息,根据内部的消息转发表,将消息转发给需要的对象。NSNotificationCenter 较之于 Delegate 可以实现更大的跨度的通信机制,可以为两个无引用关系的两个对象进行通信。

NSNotificationCenter 的通信原理使用了观察者模式,以下是广播的运行机制

  1. 接收者向NSNotificationCenter 注册观察者,并提供观察的事件(以字符串命名),及该事件触发时该执行的 SelectorBlock
  2. 发起人向NSNotificationCenter 激发事件
  3. 接收者收到广播,执行相应的 SelectorBlock

NSNotificationCenter的使用

注册广播

注册广播需要使用的方法是

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

这个方法需要使用一个NSNotificationCenter对象来调用,其中所需要的参数分别是观察的对象,收到广播后要执行的方法,事件的名称以及传递的参数。

首先我们需要创建一个广播中心对象调用这个方法,这个对象可以是匿名对象。

// 匿名的广播中心对象
[NSNotificationCenter defaultCenter];
复制代码

然后我们使用这个匿名对象来注册广播,并且实现被调用的方法

[[NSNotificationCenter defaultCenter] addObserver:self selector: @selector(test) name:@"TEST" object:nil];
复制代码
-(void)test{
    NSLog(@"有新的课程上线!");
}
复制代码

这样就完成了广播的注册。

激发广播

接着我们可以在某一时刻激发这个广播,使用的方法是:

- (void)postNotificationName:(NSNotificationName)aName object:(nullable id)anObject;

同样我们需要用一个广播中心对象来调用这个分方法,需要的参数是对应的事件名称和参数,我们可以同样适用一个广播中心的匿名对象来调用:

[[NSNotificationCenter defaultCenter]postNotificationName:@"TEST" object:nil];
复制代码

调用这个方法后广播中心就会发出一个广播从而让接受者调用预先设置的方法。

移除广播

我们需要在接受者对象的 dealloc 方法中移除这个广播。

使用的方法是

- (void)removeObserver:(id)observer name:(nullable NSNotificationName)aName object:(nullable id)anObject;

我们同样使用一个匿名方法来调用它,设置的参数必须和注册时的相同:

-(void)dealloc{
    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"TEST" object:nil];
}
复制代码
### Objective-C 中的注册方法或过程 在 iOS 开发中,Objective-C 的 `register` 方法通常用于向系统或其他组件注册特定的对象、通知或服务。这可以通过多种方式完成,具体取决于应用程序的需求。 #### 注册通知 一种常见的场景是在应用启动时通过NSNotificationCenter注册监听器: ```objc [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleNotification:) name:@"CustomNotificationName" object:nil]; ``` 这段代码会将当前对象设置为接收名为 "CustomNotificationName" 的通知,并指定当收到此通知时调用的方法[^2]。 #### 注册自定义类到NSUserDefaults 有时也需要把某些配置项保存下来以便下次启动程序能够读取这些设定,在这种情况下可以利用NSUserDefaults来进行简单的键值存储操作: ```objc NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults registerDefaults:@{@"key": @"value"}]; ``` 这里使用了 `registerDefaults:` 来预设默认值给NSUserDefaults中的键/值对。需要注意的是,这种方法只适用于首次安装后的初始化阶段,对于已经存在的用户偏好设置不会覆盖其原有值[^1]。 #### 使用KVO (Key-Value Observing) 另外还有一种重要的观察者模式叫做 KVO ,它可以用来监视属性的变化情况并作出相应反应。要启用某个实例变量上的 key-value observing 需要做如下工作: ```objc [self addObserver:self forKeyPath:@"propertyToObserve" options:NSKeyValueObservingOptionNew context:NULL]; ``` 上述语句表明希望监控自身的 propertyToObserve 属性变化状况;每当这个属性发生改变的时候就会触发相应的回调函数[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值