在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

電子發燒友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錦銳科技CA51F2 SDK開發包
  2. 24.06 MB   |  29次下載  |  1 積分
  3. 2錦銳CA51F005 SDK開發包
  4. 19.47 MB   |  3次下載  |  1 積分
  5. 310周年文章合集白皮書
  6. 15.63 MB  |  2次下載  |  免費
  7. 4世界各國&地區常見電壓/頻率/插頭/插座一覽表
  8. 2.36 MB   |  1次下載  |  免費
  9. 5FS4059B、FS4059C雙節鋰電池充電應用圖
  10. 0.05 MB   |  1次下載  |  免費
  11. 6MX6200語音芯片使用手冊V1.4
  12. 1.25 MB   |  1次下載  |  免費
  13. 7蘋果iphone 11電路原理圖
  14. 4.98 MB   |  1次下載  |  2 積分
  15. 8XILINX XCZU67DR FPGA完整原理圖
  16. 18.22 MB   |  次下載  |  8 積分

本月

  1. 1AI智能眼鏡產業鏈分析
  2. 4.43 MB   |  354次下載  |  免費
  3. 2蘇泊爾電磁爐線路的電路原理圖資料合集
  4. 2.02 MB   |  294次下載  |  5 積分
  5. 3貼片三極管上的印字與真實名稱的對照表詳細說明
  6. 0.50 MB   |  93次下載  |  1 積分
  7. 4長虹液晶電視R-HS310B-5HF01的電源板電路原理圖
  8. 0.46 MB   |  87次下載  |  5 積分
  9. 5U盤一鍵制作
  10. 23.84 MB   |  41次下載  |  免費
  11. 6錦銳科技CA51F2 SDK開發包
  12. 24.06 MB   |  29次下載  |  1 積分
  13. 7AO4803A雙P通道增強型場效應晶體管的數據手冊
  14. 0.11 MB   |  28次下載  |  2 積分
  15. 8長虹液晶彩電LS29機芯的技術資料說明
  16. 3.42 MB   |  16次下載  |  2 積分

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935127次下載  |  10 積分
  3. 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
  4. 1.48MB  |  420064次下載  |  10 積分
  5. 3Altium DXP2002下載入口
  6. 未知  |  233089次下載  |  10 積分
  7. 4電路仿真軟件multisim 10.0免費下載
  8. 340992  |  191388次下載  |  10 積分
  9. 5十天學會AVR單片機與C語言視頻教程 下載
  10. 158M  |  183342次下載  |  10 積分
  11. 6labview8.5下載
  12. 未知  |  81588次下載  |  10 積分
  13. 7Keil工具MDK-Arm免費下載
  14. 0.02 MB  |  73815次下載  |  10 積分
  15. 8LabVIEW 8.6下載
  16. 未知  |  65988次下載  |  10 積分
主站蜘蛛池模板: 亚洲成a人v在线观看 | 日韩一级欧美一级在线观看 | 夜夜五月天 | 男人的天堂天堂网 | 色综合久久九月婷婷色综合 | 视频一区二区在线 | 蜜桃五月天 | 日本精品一在线观看视频 | 男子扒开美女尿口做羞羞的事 | 欧美午夜剧场 | 天堂中文在线资源 | 成年人毛片网站 | 99久久久精品免费观看国产 | 国产秦先生大战白丝97在线 | 美女扒开尿口给男人爽免费视频 | 校园 春色 欧美 另类 小说 | 四虎最新免费观看网址 | 天天看天天操 | 国产中日韩一区二区三区 | 天天艹综合 | 狠狠做深爱婷婷久久一区 | 磁力bt种子搜索在线 | 狠狠色噜噜狠狠狠狠91 | 色综合亚洲天天综合网站 | 日本一道高清不卡免费 | 亚洲成人在线网站 | 久久99精品久久久久久牛牛影视 | 婷婷亚洲综合五月天在线 | 亚洲五月激情综合图片区 | 成年人www | 久久久久99精品成人片三人毛片 | 亚洲福利片 | 天天干天天草 | 国产或人精品日本亚洲77美色 | 精品国产你懂的在线观看 | 第三级视频在线观看 | 国产伦精品一区二区 | 稀缺资源呦视频在线网站 | 人人操天天射 | 亚洲免费视频播放 | 窝窝午夜看片免费视频 |