BeeHive原理解析

2024-02-12 22:18
文章标签 beehive 解析 原理

本文主要是介绍BeeHive原理解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. BHAppDelegate

替代AppDelegate的类,响应UIApplicationDelegate的方法。

该类有以下作用:

  1. 调用BHModuleManager- (void)triggerEvent:(NSInteger)eventType;方法,用于向各个模块转发应用事件。
  2. 更新BeeHivecontext数据。

PS

该类代码是非常正宗的AppDelegate写法,具有非常大的参考意义。

2. Module注册

不管哪一种Module注册方法,最终都离不开BHModuleManager- (void)registerDynamicModule:(Class)moduleClass;

BHModuleManager有两个重要的属性:

  • @property(nonatomic, strong) NSMutableArray<NSDictionary *> *BHModuleInfos;

该属性用于保存模块名称、模块等级、是否已实例化的信息。

  • @property(nonatomic, strong) NSMutableArray *BHModules;

该属性用于保存Module类的实例化对象。

3. Module转发应用事件

UIApplicationDelegateBHModuleEventTypeBHModuleProtocol三者对应关系:

  • Initializing the App
/// 响应事件:BHMSetupEvent,对应方法:- (void)modSetUp:(BHContext *)context;
/// 响应事件:BHMInitEvent,对应方法:- (void)modInit:(BHContext *)context;
/// 响应事件:BHMSplashEvent,对应方法:- (void)modSplash:(BHContext *)context;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(nullable NSDictionary<UIApplicationLaunchOptionsKey, id> *)launchOptions;
  • Responding to App Life-Cycle Events
/// 响应事件:BHMDidBecomeActiveEvent,对应方法:- (void)modDidBecomeActive:(BHContext *)context;
- (void)applicationDidBecomeActive:(UIApplication *)application;/// 响应事件:BHMWillResignActiveEvent,对应方法:- (void)modWillResignActive:(BHContext *)context;
- (void)applicationWillResignActive:(UIApplication *)application;/// 响应事件:BHMDidEnterBackgroundEvent,对应方法:- (void)modDidEnterBackground:(BHContext *)context;
- (void)applicationDidEnterBackground:(UIApplication *)application;/// 响应事件:BHMWillEnterForegroundEvent,对应方法:- (void)modWillEnterForeground:(BHContext *)context;
- (void)applicationWillEnterForeground:(UIApplication *)application;/// 响应事件:BHMWillTerminateEvent,对应方法:- (void)modWillTerminate:(BHContext *)context;
- (void)applicationWillTerminate:(UIApplication *)application;
  • Responding to Environment Changes
/// 响应事件:BHMDidReceiveMemoryWarningEvent,对应方法:- (void)modDidReceiveMemoryWaring:(BHContext *)context;
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application;
  • Handling Remote Notification Registration
/// 响应事件:BHMDidRegisterForRemoteNotificationsEvent,对应方法:- (void)modDidRegisterForRemoteNotifications:(BHContext *)context;
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken;/// 响应事件:BHMDidFailToRegisterForRemoteNotificationsEvent,对应方法:- (void)modDidFailToRegisterForRemoteNotifications:(BHContext *)context;
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error;/// 响应事件:BHMDidReceiveRemoteNotificationEvent,对应方法:- (void)modDidReceiveRemoteNotification:(BHContext *)context;
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler;/// 响应事件:BHMDidReceiveRemoteNotificationEvent,对应方法:- (void)modDidReceiveRemoteNotification:(BHContext *)context;
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo;/// 响应事件:BHMDidReceiveLocalNotificationEvent,对应方法:- (void)modDidReceiveLocalNotification:(BHContext *)context;
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification;
  • Continuing User Activity and Handling Quick Actions
/// 响应事件:BHMWillContinueUserActivityEvent,对应方法:- (void)modWillContinueUserActivity:(BHContext *)context;
- (BOOL)application:(UIApplication *)application willContinueUserActivityWithType:(NSString *)userActivityType;/// 响应事件:BHMContinueUserActivityEvent,对应方法:- (void)modContinueUserActivity:(BHContext *)context;
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray<id<UIUserActivityRestoring>> * __nullable restorableObjects))restorationHandler;/// 响应事件:BHMDidUpdateUserActivityEvent,对应方法:- (void)modDidUpdateContinueUserActivity:(BHContext *)context;
- (void)application:(UIApplication *)application didUpdateUserActivity:(NSUserActivity *)userActivity;/// 响应事件:BHMDidFailToContinueUserActivityEvent,对应方法:- (void)modDidFailToContinueUserActivity:(BHContext *)context;
- (void)application:(UIApplication *)application didFailToContinueUserActivityWithType:(NSString *)userActivityType error:(NSError *)error;/// 响应事件:BHMQuickActionEvent,对应方法:- (void)modQuickAction:(BHContext *)context;
- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void(^)(BOOL succeeded))completionHandler;
  • Interacting With WatchKit
/// 响应事件:BHMHandleWatchKitExtensionRequestEvent,对应方法:- (void)modHandleWatchKitExtensionRequest:(BHContext *)context;
- (void)application:(UIApplication *)application handleWatchKitExtensionRequest:(nullable NSDictionary *)userInfo reply:(void(^)(NSDictionary * __nullable replyInfo))reply;
  • Opening a URL-Specified Resource
/// 响应事件:BHMOpenURLEvent,对应方法:- (void)modOpenURL:(BHContext *)context;
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options;/// 响应事件:BHMOpenURLEvent,对应方法:- (void)modOpenURL:(BHContext *)context;
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(nullable NSString *)sourceApplication annotation:(id)annotation;
  • Receiving Notifications
/// 响应事件:BHMWillPresentNotificationEvent,对应方法:- (void)modWillPresentNotification:(BHContext *)context;
- (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler;
  • Handling the Selection of Custom Actions
/// 响应事件:BHMDidReceiveNotificationResponseEvent,对应方法:- (void)modDidReceiveNotificationResponse:(BHContext *)context;
- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)(void))completionHandler;

4. Service注册

Service的注册离不开BHServiceManager- (void)registerService:(Protocol *)service implClass:(Class)implClass;方法。

BHServiceManager有一个重要的属性:

@property (nonatomic, strong) NSMutableDictionary *allServicesDict;

该属性用于存放ServiceProtocol和Service类,并且以ServiceProtocol为键名,Service类为键值。

5. Service调用

Service的调用离不开BHServiceManager- (id)createService:(Protocol *)service withServiceName:(NSString *)serviceName shouldCache:(BOOL)shouldCache;方法。

该方法以ServiceProtocol为键名,从allServicesDict这个属性中搜索Service类。
Service类被找到时,该方法会根据ServiceProtocol的+ (BOOL)singleton;的返回值,判断返回的Service对象是单例还是多例。如果是单例,调用Service类的+ (id)shareInstance;方法;如果是多例,调用Service类的+ (instancetype)alloc;- (instancetype)init;方法。

这篇关于BeeHive原理解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/703740

相关文章

Unity GC + C# GC + Lua GC原理

Unity垃圾回收原理 参考文章:垃圾回收 (计算机科学) - 维基百科,自由的百科全书 (wikipedia.org) 在计算机科学中,垃圾回收(英语:Garbage Collection,缩写为GC)是指一种自动的存储器管理机制。当某个程序占用的一部分内存空间不再被这个程序访问时,这个程序会借助垃圾回收算法向操作系统归还这部分内存空间。垃圾回收器可以减轻程序员的负担,也减少程序中的错误。

PID神经网络原理与MATLAB实现(SISO)

序 最近想实现一下PID神经网络,但是书籍和博客都令人头疼,主要是卡在误差反向传播的计算过程中。找一篇通俗易懂的文章实在不易,最终,只能自己静下心,仔细琢磨。只要每一步在逻辑上都是合理的,我们有理由相信能够得到正确的结果。抱着这样的心态,由浅入深,来实现一下。 一、网络结构定义 简单起见,假设一个受控系统单输入 u u u 单输出 x x x ,使用一个PID神经网络来作为控制器

【Datawhale组队学习:Sora原理与技术实战】AIGC技术基础知识

AIGC是什么 AIGC全称叫做AI generated content,AlGC (Al-Generated Content,人工智能生产内容),是利用AlI自动生产内容的生产方式。 在传统的内容创作领域中,PGC(Professionally-generated Content,专业生成内容)和UGC(User-generated Content,用户内容生产)作为两大主流模式,共同构成了

无人机镜头稳定的原理和相关算法

无人机的镜头稳定主要基于两个关键技术:镜头平衡技术和实时电子稳像。无人机镜头稳定的原理和相关算法主要是通过镜头平衡技术和实时电子稳像技术来保持摄像镜头的稳定性,从而拍摄出清晰、稳定的画面。无人机镜头稳定的原理主要是通过传感器和算法来实现的。无人机镜头稳定需要综合运用传感器技术、算法和控制策略,以确保拍摄到稳定、清晰的图像。不同的无人机可能采用不同的稳定方法和算法,具体的实现方式会因无人机的型号和设

攻略 | 如何通过数据解析,优化知识库以满足用户需求

在日常生活和工作中,一个高效且实用的知识库已成为我们的得力助手。但如何确保它不仅仅是信息的堆砌,真正为用户创造价值与效益?接下来,我们将深入探讨这一问题,并借助HelpLook知识库的数据分析功能,带您全面了解如何优化知识库,以更精准地服务于用户。 | 为什么知识库需要接入分析功能? 在追求极致用户体验的时代,知识库成为连接企业与用户的桥梁。通过深度挖掘和分析数据,我们能更精准地理解用户需

自学高效备考2024年AMC10:2000-2023年1250道AMC10真题解析

如何通过自学提高初中和高中数学成绩?现在初中和高中有哪些可以参加的数学竞赛?有没有难度适中、兼具趣味性的数学竞赛?现在参与人数较多的初中、高中数学有哪些?... 如果你也在关注以上问题,不妨看看AMC10美国数学竞赛,可以先系统研究AMC10的历年真题,即使不参加AMC10竞赛,吃透了历年真题1250道和背后的知识体系,那么初中和高中数学一定会学得非常轻松、游刃有余。如果将来要参加AMC10的竞

详细讲解Docker架构的原理、功能以及如何使用

一、简介 1、了解docker的前生LXC LXC为Linux Container的简写。可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。相当于C++中的NameSpace。容器有效地将由单个操作系统管理的资源划分到孤立的组中,以更好地在孤立的组之间平衡有冲突的资源使用需求。 与传统虚拟化技术相比,它的优势在于: (1)与宿主机使用同一个内核

2023年09月CCF-GESP编程能力等级认证Scratch图形化编程四级真题解析

一、单选题(共15题,共30分) 第1题 人们所使用的手机上安装的 App 通常指的是( )。 A:一款操作系统 B:一款应用软件 C:一种通话设备 D:以上都不对 答案:B 第2题 下列流程图的输出结果是?( ) A:9 B:7 C:5 D:11 答案:A 第3题 默认小猫角色,执行下列程序,下列说法正确的是?( ) A:小猫每滑行一次变量增加 1,变量变成 3 后停止 B:

HBase – 存储文件HFile结构解析

HFile是HBase存储数据的文件组织形式,参考BigTable的SSTable和Hadoop的TFile实现。从HBase开始到现在,HFile经历了三个版本,其中V2在0.92引入,V3在0.98引入。HFileV1版本的在实际使用过程中发现它占用内存多,HFile V2版本针对此进行了优化,HFile V3版本基本和V2版本相同,只是在cell层面添加了Tag数组的支持。鉴于此,本文主要针

百度SEO快排原理是什么?如何快速排名方法?

前言:我之前说过我不打算写这个快速排序。 首先,我从来没有在自己的网站上操作过所谓的快速排序。 其次,我不能像网上很多人写的那样透露百度快速排序的秘密(说实话,你可以透露秘密)。 方法是有了,但是真的有用吗? 真正懂的人都是低调赚钱的)。 我只是站在新手的角度,让更多的新手了解一下所谓的百度快队列是什么,以及同行网站是否使用了所谓的快队列技术,以及我们自己应该如何处理。 什么是百度SEO快速排名