服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - IOS - iOS中的通知机制

iOS中的通知机制

2021-01-15 16:11errylsxu IOS

网上经常说iOS的通知机制是使用了观察者模式,里面有两个角色,其一是poster(发送者),另一个是observer(接受信息的订阅者)。接下来通过本文给大家介绍iOS中的通知机制,感兴趣的朋友一起学习吧

网上经常说iOS通知机制是使用了观察者模式,里面有两个角色,其一是poster(发送者),另一个是observer(接受信息的订阅者)。但我认为重要的角色是通知中心,它是整个通知机制的核心,有poster发送者发送的消息必定要到达通知中心,再由通知中心根据这个消息被哪些observer订阅者订阅过,就把消息往那些订阅者去分发。整体可以与现在的电子邮件结构作类比的。

但要额外说明一下,iOS的通知虽然也叫Notification通知,但是与Android中的通知是不一样的,在Android中的通知是一种消息推送的形式,而在iOS中肯定也有消息推送,这就是推送机制那部分的内容。说会这个通知机制的其实就是原本在学习C#时的事件,只不过这里的事件是对于整个系统的全局事件,任何一方往系统的这个全局事件去注册绑定了方法,到事件被触发的时候就能够被执行。

整个通知的操作流程,我们只需要把poster和observer设置好就可以了

对于Poster的操作比较简单,他只需要往通知中心推通知就可以了,采用以下的代码

?
1
[[NSNotificationCenter defaultCenter] postNotificationName:@”PostOne” object:@”This is posterone”];

或者

?
1
[[NSNotificationCenter defaultCenter] postNotification:[NSNotification notificationWithName:@”PostOne” object:@”This is posterone”]];

NotificationWithName: object: 方法还有一个重载就是有userInfo: 参数,它是NSDictionary的字典类型,就是用于传递用户参数。

  对于Observer则相对没Poster那么简单,在C#中进行事件注册绑定的时候也发现,触发事件的只需要像调用方法那样子调用就可以了,但是注册那一方则需要为事件绑定方法,又要定义方法,而在iOS的通知机制中,需要注册,回调处理(就是事件中的方法定义),用完了还要去删除。

注册

?
1
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(callBack1:) name:@”PostOne” object: nil];

这里的参数是跟postNotificationName: object:对应的。注册了哪个通知name参数就填上对对应的值

回调处理

?
1
2
3
4
5
6
-(void) callBack1(NSNotification*)notification
{
notification.name://通知的名称
notification.object;//发送通知时的object
notification.userInfo//发送通知时的userInfo
}

删除

在使用消息完毕(就是不再对接收到的消息作处理的)之后,需要进行删除操作

?
1
2
[[NSNotificationCenter defaultCenter]removeObserver: self];//删除所有注册过的通知
[[NSNotificationCenter defaultCenter]removeObserver:self name:@”PostOne“ object:nil];//删除名称为”PostOne“的通知

补充:

ios中观察者模式与通知机制,及KVO

在ios开发中,通知机制和KVO都是依靠观察者模式得以实现。通知机制与KVO的不同之处在于,前者是一个中心对象为所有观察者提供变更通知,后者是被观察对象直接向观察者发送通知。

以下关注观察者模式与通知机制实现:

1、观察者模式中Subject对象,又可称目标对象,是通知的发布者,又是被观察者。提供注册和取消注册的方法;Observer对象,又可称为观察者,是通知的订阅者。Observer类中,相识Subject,以达到能够接收通知。

2、ios中的通知机制,是Cocoa Touch框架为开发者开发的类,让开发者不必自己写观察者模式,用到它便能实现。对于我而言,通知机制的所有使用,都集中到一个类中。而导致我用通知机制去理解观察者模式时,迷糊于Subject和Observer,谁是通知的发送者,因为类中集结了观察者和发送者。

延伸 · 阅读

精彩推荐
  • IOSiOS通过逆向理解Block的内存模型

    iOS通过逆向理解Block的内存模型

    自从对 iOS 的逆向初窥门径后,我也经常通过它来分析一些比较大的应用,参考一下这些应用中某些功能的实现。这个探索的过程乐趣多多,不仅能满足自...

    Swiftyper12832021-03-03
  • IOSiOS中tableview 两级cell的展开与收回的示例代码

    iOS中tableview 两级cell的展开与收回的示例代码

    本篇文章主要介绍了iOS中tableview 两级cell的展开与收回的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    J_Kang3862021-04-22
  • IOSiOS布局渲染之UIView方法的调用时机详解

    iOS布局渲染之UIView方法的调用时机详解

    在你刚开始开发 iOS 应用时,最难避免或者是调试的就是和布局相关的问题,下面这篇文章主要给大家介绍了关于iOS布局渲染之UIView方法调用时机的相关资料...

    windtersharp7642021-05-04
  • IOSIOS 屏幕适配方案实现缩放window的示例代码

    IOS 屏幕适配方案实现缩放window的示例代码

    这篇文章主要介绍了IOS 屏幕适配方案实现缩放window的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要...

    xiari5772021-06-01
  • IOSiOS 雷达效果实例详解

    iOS 雷达效果实例详解

    这篇文章主要介绍了iOS 雷达效果实例详解的相关资料,需要的朋友可以参考下...

    SimpleWorld11022021-01-28
  • IOS解析iOS开发中的FirstResponder第一响应对象

    解析iOS开发中的FirstResponder第一响应对象

    这篇文章主要介绍了解析iOS开发中的FirstResponder第一响应对象,包括View的FirstResponder的释放问题,需要的朋友可以参考下...

    一片枫叶4662020-12-25
  • IOSIOS开发之字典转字符串的实例详解

    IOS开发之字典转字符串的实例详解

    这篇文章主要介绍了IOS开发之字典转字符串的实例详解的相关资料,希望通过本文能帮助到大家,让大家掌握这样的方法,需要的朋友可以参考下...

    苦练内功5832021-04-01
  • IOS关于iOS自适应cell行高的那些事儿

    关于iOS自适应cell行高的那些事儿

    这篇文章主要给大家介绍了关于iOS自适应cell行高的那些事儿,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的...

    daisy6092021-05-17