精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

電子發燒友App

硬聲App

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示
電子發燒友網>電子資料下載>電子資料>BeeHive iOS模塊化編程框架

BeeHive iOS模塊化編程框架

2022-06-24 | zip | 0.29 MB | 次下載 | 2積分

資料介紹

授權協議 GPL
開發語言 Objective-C
軟件類型 開源軟件
所屬分類 iOS代碼庫

軟件簡介

BeeHive是用于ios的app模塊化編程的框架實現方案,吸收了Spring框架service的理念來實現模塊間的API耦合。基本原理如下:

pYYBAGKrCX2AD0gvAABTwfS5_OY744.jpg

實現以下特性

  • 插件化的模塊開發運行框架

  • 模塊具體實現與接口調用分離

  • 模塊生命周期管理,擴展了應用的系統事件

因為基于Spring的Service理念,雖然可以使模塊間的具體實現與接口解耦,但無法避免對接口類的依賴關系。

為什么不使用invoke以及動態鏈接庫技術實現對接口實現的解耦,類似Apache的DSO的方式。

主要是考慮學習成本難度以及動態調用實現無法在編譯檢查階段檢測接口參數變更等問題,動態技術需要更高的編程門檻要求

BeeHive靈感來源于蜂窩。蜂窩是世界上高度模塊化的工程結構,六邊形的設計能帶來無限擴張的可能。所以我們用了BeeHive來做為這個項目的命名。

生命周期的變化

事件

BeeHive會給每個模塊提供生命周期事件,用于與BeeHive宿主環境進行必要信息交互 事件分為三種類型:

  • 系統事件

  • 通用事件

  • 業務自定義事件

系統事件

系統事件通常是Application生命周期事件,例如DidBecomeActive、WillEnterBackground等 系統事件基本工作流如下:

poYBAGKrCX-AHIaBAACnKX05rbo986.jpg

通用事件

在系統事件的基礎之上,擴展了應用的通用事件,例如modSetup、modInit等,可以用于編碼實現各插件模塊的設置與初始化

擴展的通用事件如下:

pYYBAGKrCYGAcNFoAADSk_QeXLw314.jpg

業務自定義事件

如果覺得系統事件、通用事件不足以滿足需要,我們還將事件封裝簡化成BHAppdelgate,你可以通過繼承BHAppdelegate來擴展自己的事件。

注冊

模塊注冊的方式有靜態注冊與動態注冊兩種

  • 靜態注冊

通過在BeeHive.plist文件中注冊符合BHModuleProtocol協議模塊類

poYBAGKrCYOAF-W2AAA6G49Ausw974.png

  • 動態注冊

@implementation?HomeModule
BH_EXPORT_MODULE()??//聲明該類為模塊入口

在模塊入口類實現中 使用BH_EXPORT_MODULE()宏聲明該類為模塊入口實現類

異步加載

如果設置模塊導出為BH_EXPORT_MODULE(YES),則會在啟動之后第一屏內容展現之前異步執行模塊的初始化,可以優化啟動時時間消耗

編程開發

BHModuleProtocol為各個模塊提供了每個模塊可以hook的函數,用于實現插件邏輯以及代碼實現

  • 設置環境變量

通過context.env可以判斷我們的應用環境狀態來決定我們如何配置我們的應用

-(void)modSetup:(BHContext?*)context
{
switch?(context.env)?{
case?BHEnvironmentDev:
//....初始化開發環境
break;
case?BHEnvironmentProd:
//....初始化生產環境
default:
break;
}
}
  • 模塊初始化

如果模塊有需要啟動時初始化的邏輯,可以在modInit里編寫,例如模塊注冊一個外部模塊可以訪問的Service接口

-(void)modInit:(BHContext?*)context
{
//注冊模塊的接口服務
[[BeeHive?shareInstance]?registerService:@protocol(UserTrackServiceProtocol)?service:[BHUserTrackViewController?class]];
}
  • 處理系統事件

系統的事件會被傳遞給每個模塊,讓每個模塊自己決定編寫業務處理邏輯,比如3D-Touch功能

-(void)modQuickAction:(BHContext?*)context
{
[self?process:context.shortcutItem?handler:context.scompletionHandler];
}

模間調用

通過處理Event編寫各個業務模塊可以實現插件化編程,各業務模塊之間沒有任何依賴,core與module之間通過event交互,實現了插件隔離。但有時候我們需要模塊間的相互調用某些功能來協同完成功能。 通常會有三種形式的接口訪問形式

  • 基于接口的實現Service訪問方式(java spring框架實現)

  • 基于函數調用約定實現的Export Method(PHP的extension,ReactNatve的擴展機制)

  • 基于跨應用實現的Url route模式(iphone app之間的互訪)

我們目前實現了第一種方式,后續會逐步實現后兩種方式

Servcie訪問

Service訪問的優點是可以編譯時檢查發現接口的變更,從而及時修正接口問題。缺點是需要依賴接口定義的頭文件,通過模塊增加得越多,維護接口定義的也有一定工作量。以為HomeServiceProtocol為例

  • 定義HomeServiceProtocol暴露模塊對外訪問的接口

@protocol?HomeServiceProtocol?
-(void)registerViewController:(UIViewController?*)vc?title:(NSString?*)title?iconName:(NSString?*)iconName;
@end
  • 注冊Service有三種方式

  • 聲明式注冊

@implementation?HomeService
BH_EXPORT_SERVICE()
  • API注冊

[[BeeHive?shareInstance]?registerService:@protocol(HomeServiceProtocol)?service:[BHViewController?class]];
  • BHService.plist注冊





HomeServiceProtocol
BHViewController

  • 調用

#import?"BHService.h"
id?homeVc?=?[[BeeHive?shareInstance]?createService:@protocol(HomeServiceProtocol)];

單例與多例

對于有些場景下,我們訪問每個聲明為service的對象,希望對象能保留一些狀態,那我們需要聲明這個service對象是一個單例對象。

我們只需要在service對象中實現事件函數

聲明

-(BOOL)?singleton
{
return?YES;
}

通過createService獲取的對象則為單例對象,如果實現上面函數返回的是NO,則createService返回的是多例

id?homeVc?=?[[BeeHive?shareInstance]?createService:@protocol(HomeServiceProtocol)];

上下文環境Context

  • 初始化設置應用的項目信息,并在各模塊間共享整個應用程序的信息

-?(BOOL)application:(UIApplication?*)application?didFinishLaunchingWithOptions:(NSDictionary?*)launchOptions
{
[BHContext?shareInstance].env?=?BHEnvironmentDev;?//定義應用的運行開發環境
[BHContext?shareInstance].application?=?application;
[BHContext?shareInstance].launchOptions?=?launchOptions;
[BHContext?shareInstance].moduleConfigName?=?@"BeeHive.bundle/CustomModulePlist";//可選,默認為BeeHive.bundle/BeeHive.plist
[BHContext?shareInstance].serviceConfigName?=??@"BeeHive.bundle/CustomServicePlist";//可選,默認為BeeHive.bundle/BHService.plist
[[BeeHive?shareInstance]?setContext:[BHContext?shareInstance]];
[super?application:application?didFinishLaunchingWithOptions:launchOptions];
id?homeVc?=?[[BeeHive?shareInstance]?createService:@protocol(HomeServiceProtocol)];
if?([homeVc?isKindOfClass:[UIViewController?class]])?{
UINavigationController?*navCtrl?=?[[UINavigationController?alloc]?initWithRootViewController:(UIViewController*)homeVc];
self.window?=?[[UIWindow?alloc]?initWithFrame:[UIScreen?mainScreen].bounds];
self.window.rootViewController?=?navCtrl;
[self.window?makeKeyAndVisible];
}
return?YES;
}

更多細節可以參考Example用例

集成方式

  • use cocoapods

pod "BeeHive", '1.0.0'

作者

一渡, shijie.qinsj@alibaba-inc.com

達茲, dazi.dp@alibaba-inc.com

?

下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數據手冊
  2. 1.06 MB  |  532次下載  |  免費
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費
  5. 3TC358743XBG評估板參考手冊
  6. 1.36 MB  |  330次下載  |  免費
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費
  9. 5元宇宙深度解析—未來的未來-風口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費
  11. 6迪文DGUS開發指南
  12. 31.67 MB  |  194次下載  |  免費
  13. 7元宇宙底層硬件系列報告
  14. 13.42 MB  |  182次下載  |  免費
  15. 8FP5207XR-G1中文應用手冊
  16. 1.09 MB  |  178次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費
  3. 2555集成電路應用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費
  7. 4開關電源設計實例指南
  8. 未知  |  21549次下載  |  免費
  9. 5電氣工程師手冊免費下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費
  11. 6數字電路基礎pdf(下載)
  12. 未知  |  13750次下載  |  免費
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費
  15. 8《LED驅動電路設計》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉中文版)
  4. 78.1 MB  |  537798次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191187次下載  |  免費
  13. 7十天學會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費