EventBus for iOS
NSNotification
的通信功能。Cocoapods:pod ‘IMXEventBus’, ‘~> 1.0.0’
手动导入:本库无依赖其它三方库,直接将IMXEventBus
文件夹拖入项目即可。
#import "IMXEventBusKit.h"
简略模式:
//默认值:
//优先级:Default;回调执行:非主线程
[IMXEventSubscriber addTarget:self name:@“login_eventName” action:^(IMXEventUserInfo *info) {
NSLog(@“callback info:%@ thread:%@”,[info description],[NSThread currentThread]);
}];
```
全参模式:
[IMXEventSubscriber addTarget:self name:@"login_eventName" priority:IMXEventSubscriberPriorityDefault inMainTread:YES action:^(IMXEventUserInfo *info) {
NSLog(@"callback info:%@ thread:%@",[info description],[NSThread currentThread]);
}];
简略模式:
//默认值:
//被触发的事件:不强制在主线程中执行回调
[IMXEventPoster postEventName:@“login_eventName” object:@{@“userName”😡“demo”}];
```
全参模式:
[IMXEventPoster postEventName:@“login_eventName” object:nil forceMain:YES];
```
isInMainThread
;否则均强制在主线程执行。功能汇总(仅在Debug模式下,log处理):
重复添加target对应的同一事件时,会打印或者弹出log提示。
post时,无对应的监听者存在,会打印或者弹出log提示。
Debug模式下:输出所有Event信息。(便于检测当前无订阅者的僵尸事件以及未被触发的事件)
注:仅输出之前的Event调用情况,无法检测输出之后的log,故输出的数目不代表最终数据。
开启Debug功能:默认不开启。
[IMXEventDebug_share enableDebug:YES];
IMXEventDebug_share.debugType = IMXEventDebugTypeAlert;
Target:Model
方式存储,对应Target由于生命周期问题释放后,那么事件队列中相关条目会被自动释放。但无法实时检测到,故发布事件时均需巡检一次。图谱1:类图结构
图谱2:事件注册流程图
图谱3:事件触发流程图
数据
行为:
actionWIthInfo:forceMainThread:
:回调执行最终实现数据
功能:单一事件对象。
数据:
行为:
hasContainedSubscribModelForKey:
:检查各队列中是否包含Key对应的订阅者。
registSubscribModel:forKey:
:注册订阅者至对应队列。
postEventWithDeliveryData:isInMain
:事件出发,逐个执行事件中各队列的订阅者行为。
deleteEntryForTarget:
:删除事件中Target对应的一条订阅者记录。
isEmptyMap
:各优先级对应的队列是否全为空
数据:
行为:
registSubscribModel:markEvent:priority:inMainTread:action:
:注册订阅者publishEvent:delivery:isFromMainTread:
:触发事件unregistSubscribModelFromTarget:
: 解注册Target对应的订阅者:若解除后事件无相关订阅者,则移除该Event对象。removeEvent:
: 移除事件主要是针对IMXEventBus
注册接口的封装。如将优先级
和是否主线程执行回调
统一置常用值为默认值。
主要是针对IMXEventBus
发布接口的封装。将是否主线程执行回调
统一置常用值为默认值。