IOS 之 通知NSNotificationCenter

本文详细介绍了在iOS开发中使用通知中心(NotificationCenter)和键值对观察(NSKeyValueObserving)进行松耦合通信的方式。通过实例演示了如何构建自定义通知事件、发送通知以及订阅通知,同时解释了键值对观察机制如何实现对象属性变化后的自动通知。重点突出iOS开发中高效、灵活的数据同步与事件监听方法。

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

    通知,就是说A观察B的情况.如果B有所改动,就通知A让A知道.这是一种松耦合的通信方式.

有两种方法:

1. NSNotificationCenter通知中心

例子如下:

//构建自定义通知事件和发送
//通知的事件名称, 和 参数
NSNotification *notification = [NSNotification notificationWithName:@"data changes" object:self];
NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
[notificationCenter postNotification:notification];

//订阅这个通知后.上边发送的消息,这里才能收到
NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
//update是收到通知后执行的方法, subject是上边传送过来的参数
[notificationCenter addObserver:self selector:@selector(update:) name:@"data changes" object:subject];

2. NSKeyValueObserving 键值对的方式

手动调用通知

在观察者的类里加上如下代码

//把自身作为观察者加到scribble里
//注册@"mark" 为键 scribble为值
[scribble addObserver:self forKeyPath:@"mark" 
						   opations:NSKeyValueObservingOptionInitial | 
									NSKeyValueObservingOptionNew
							context:nil];
收到通知后执行的方法

//在观察者的代码里加上处理收到通知后的方法
- (void) observeValueForKeyPath:(NSString *)keyPath 
					   ofObject:(id)object 
					     change:(NSDictionary *)change
						context:(void *)context
{
	//如果是来自注册mark的通知就执行并且判断发送通知的来源是否是Scribble类
	if( [object is KindOfClass:[Scribble class]] && [keyPath isEqualoString:@"mark"] )
	{
		//NSKeyValueChangeNewKey是用来获取Scribble里改动的值
		id mark = [change objectForKey:NSKeyValueChangeNewKey];
		//..一些处理
	}
}


在被观察者的类里加上

//在scribble类里有变动的地方执行以通知观察者
//这里执行完didChangeValueForKey后会发送一条通知执行以下代码
[self willChangeValueForKey:@"mark"];
....//一些改动
[self didChangeValueForKey:@"mark"];  



至此,通知差不多就是这,慢慢练练就是熟悉了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值