iOS系统的底层通知框架库示例详解-创新互联

观察者模式

走过十载,我们已为众多企业及政府机关提供专业的互联网服务。我们不只是一家专业的建站公司;我们对营销、技术、服务都有自己独特见解,成都创新互联采取“创意+综合+营销”一体化的方式为您提供更专业的服务!成都创新互联经历的每一步也许不一定是最完美的,但每一步都有值得深思的意义。

观察者模式是一种用于解耦一系列需要相互协作的类之间进行通信的对象行为模式。它定义了对象之间的一种一对多的依赖关系。当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知。观察者模式的实现一般分为两个步骤:消费者注册通知消息监听器、生产者发送通知消息。

iOS系统提供了多种对观察者模式的实现:在Cocoa Touch层通过NSNotification类和NSNotificationCenter类来实现通知消息的注册处理和发送,而在CoreFoundation层则提供了CFNotificationXXX系列的C函数来实现通知消息的注册处理和发送,而在操作系统层面则通过libsystem_notify.dylib库提供了一套基于C语言的更加底层的通知消息注册和发送机制。

本文将重点介绍libsystem_notify.dylib(以后简称为系统通知库)库中所提供用于实现通知消息注册和通知消息发送的各种接口函数。系统通知库中的通知消息注册和发送是可以用来实现跨进程通信的一种底层的通知机制。

系统通知库的API

系统通知库中的所有函数都在notify.h文件中被声明,因此当你要使用系统通知库提供的函数时,需要在代码中#include 。正如其它所有基于通知消息的实现一样,每一种通知消息都通过一个字符串来进行标识,系统通知库中的通知消息也是如此。除此之外每个进程注册监听了一个通知消息时还会生成一个进程内有效的通知消息标识token。可以将token理解为进程在运行时对某个监听的通知消息的唯一表征。系统通知库在处理通知消息时分别提供了: 基于block的处理器、基于mach port的消息端口、基于信号的处理、基于文件操作的处理器一共四种处理方式。

一、通知消息的注册

系统通知库为支持上述四种消息处理机制,分别提供四个函数来实现各种处理类型的通知消息的注册:

//基于block处理的通知注册
uint32_t notify_register_dispatch(const char *name, int *out_token, dispatch_queue_t queue, notify_handler_t handler)

//基于信号处理的通知注册
uint32_t notify_register_signal(const char *name, int sig, int *out_token);

//基于mach port消息的通知注册
uint32_t notify_register_mach_port(const char *name, mach_port_t *notify_port, int flags, int *out_token);

//基于文件描述符的通知注册。
uint32_t notify_register_file_descriptor(const char *name, int *notify_fd, int flags, int *out_token);

另外有需要云服务器可以了解下创新互联建站www.cdcxhl.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


文章名称:iOS系统的底层通知框架库示例详解-创新互联
本文地址:http://ybzwz.com/article/epeoo.html