91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

電子發(fā)燒友App

硬聲App

掃碼添加小助手

加入工程師交流群

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>BeeHive iOS模塊化編程框架

BeeHive iOS模塊化編程框架

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

資料介紹

授權(quán)協(xié)議 GPL
開發(fā)語言 Objective-C
軟件類型 開源軟件
所屬分類 iOS代碼庫

軟件簡介

BeeHive是用于ios的app模塊化編程的框架實(shí)現(xiàn)方案,吸收了Spring框架service的理念來實(shí)現(xiàn)模塊間的API耦合?;驹砣缦?

pYYBAGKrCX2AD0gvAABTwfS5_OY744.jpg

實(shí)現(xiàn)以下特性

  • 插件化的模塊開發(fā)運(yùn)行框架

  • 模塊具體實(shí)現(xiàn)與接口調(diào)用分離

  • 模塊生命周期管理,擴(kuò)展了應(yīng)用的系統(tǒng)事件

因?yàn)榛赟pring的Service理念,雖然可以使模塊間的具體實(shí)現(xiàn)與接口解耦,但無法避免對接口類的依賴關(guān)系。

為什么不使用invoke以及動態(tài)鏈接庫技術(shù)實(shí)現(xiàn)對接口實(shí)現(xiàn)的解耦,類似Apache的DSO的方式。

主要是考慮學(xué)習(xí)成本難度以及動態(tài)調(diào)用實(shí)現(xiàn)無法在編譯檢查階段檢測接口參數(shù)變更等問題,動態(tài)技術(shù)需要更高的編程門檻要求

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

生命周期的變化

事件

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

  • 系統(tǒng)事件

  • 通用事件

  • 業(yè)務(wù)自定義事件

系統(tǒng)事件

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

poYBAGKrCX-AHIaBAACnKX05rbo986.jpg

通用事件

在系統(tǒng)事件的基礎(chǔ)之上,擴(kuò)展了應(yīng)用的通用事件,例如modSetup、modInit等,可以用于編碼實(shí)現(xiàn)各插件模塊的設(shè)置與初始化

擴(kuò)展的通用事件如下:

pYYBAGKrCYGAcNFoAADSk_QeXLw314.jpg

業(yè)務(wù)自定義事件

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

注冊

模塊注冊的方式有靜態(tài)注冊與動態(tài)注冊兩種

  • 靜態(tài)注冊

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

poYBAGKrCYOAF-W2AAA6G49Ausw974.png

  • 動態(tài)注冊

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

在模塊入口類實(shí)現(xiàn)中 使用BH_EXPORT_MODULE()宏聲明該類為模塊入口實(shí)現(xiàn)類

異步加載

如果設(shè)置模塊導(dǎo)出為BH_EXPORT_MODULE(YES),則會在啟動之后第一屏內(nèi)容展現(xiàn)之前異步執(zhí)行模塊的初始化,可以優(yōu)化啟動時時間消耗

編程開發(fā)

BHModuleProtocol為各個模塊提供了每個模塊可以hook的函數(shù),用于實(shí)現(xiàn)插件邏輯以及代碼實(shí)現(xiàn)

  • 設(shè)置環(huán)境變量

通過context.env可以判斷我們的應(yīng)用環(huán)境狀態(tài)來決定我們?nèi)绾闻渲梦覀兊膽?yīng)用

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

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

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

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

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

模間調(diào)用

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

  • 基于接口的實(shí)現(xiàn)Service訪問方式(java spring框架實(shí)現(xiàn))

  • 基于函數(shù)調(diào)用約定實(shí)現(xiàn)的Export Method(PHP的extension,ReactNatve的擴(kuò)展機(jī)制)

  • 基于跨應(yīng)用實(shí)現(xiàn)的Url route模式(iphone app之間的互訪)

我們目前實(shí)現(xiàn)了第一種方式,后續(xù)會逐步實(shí)現(xiàn)后兩種方式

Servcie訪問

Service訪問的優(yōu)點(diǎn)是可以編譯時檢查發(fā)現(xiàn)接口的變更,從而及時修正接口問題。缺點(diǎn)是需要依賴接口定義的頭文件,通過模塊增加得越多,維護(hù)接口定義的也有一定工作量。以為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

  • 調(diào)用

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

單例與多例

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

我們只需要在service對象中實(shí)現(xiàn)事件函數(shù)

聲明

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

通過createService獲取的對象則為單例對象,如果實(shí)現(xiàn)上面函數(shù)返回的是NO,則createService返回的是多例

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

上下文環(huán)境Context

  • 初始化設(shè)置應(yīng)用的項目信息,并在各模塊間共享整個應(yīng)用程序的信息

-?(BOOL)application:(UIApplication?*)application?didFinishLaunchingWithOptions:(NSDictionary?*)launchOptions
{
[BHContext?shareInstance].env?=?BHEnvironmentDev;?//定義應(yīng)用的運(yùn)行開發(fā)環(huán)境
[BHContext?shareInstance].application?=?application;
[BHContext?shareInstance].launchOptions?=?launchOptions;
[BHContext?shareInstance].moduleConfigName?=?@"BeeHive.bundle/CustomModulePlist";//可選,默認(rèn)為BeeHive.bundle/BeeHive.plist
[BHContext?shareInstance].serviceConfigName?=??@"BeeHive.bundle/CustomServicePlist";//可選,默認(rèn)為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;
}

更多細(xì)節(jié)可以參考Example用例

集成方式

  • use cocoapods

pod "BeeHive", '1.0.0'

作者

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

達(dá)茲, dazi.dp@alibaba-inc.com

?

APP 編程 iOS
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

評論

查看更多

下載排行

本周

  1. 1耗盡型MOS FET產(chǎn)品目錄選型表
  2. 0.14 MB   |  2次下載  |  免費(fèi)
  3. 2TI系列-米爾TI AM62L核心板開發(fā)板-高能效低功耗嵌入式平臺
  4. 1.51 MB  |  次下載  |  免費(fèi)
  5. 3WILLSEMI韋爾20年半年度報告由代理分銷經(jīng)銷一級代理分銷經(jīng)銷
  6. 3.30 MB  |  次下載  |  免費(fèi)
  7. 4LRC 樂山無線電InTWSApplications家電由原廠代理分銷經(jīng)銷一級代理分銷經(jīng)銷供應(yīng)
  8. 85.84 KB  |  次下載  |  免費(fèi)
  9. 5LAT1596 一文說明白 STM32G4 雙 Bank 啟動與升級
  10. 0.64 MB   |  次下載  |  5 積分
  11. 6LAT1594_基于事件喚醒低功耗之介紹
  12. 0.37 MB   |  次下載  |  5 積分
  13. 7PT8P2309 觸控 A/D 型 8-Bit MCU規(guī)格書
  14. 4.05 MB   |  次下載  |  免費(fèi)
  15. 8PT8P2308 觸控 A/D 型 8-Bit MCU規(guī)格書
  16. 4.13 MB   |  次下載  |  免費(fèi)

本月

  1. 1美的電磁爐電路原理圖資料
  2. 4.39 MB   |  19次下載  |  10 積分
  3. 2反激式開關(guān)電源設(shè)計解析
  4. 0.89 MB   |  11次下載  |  5 積分
  5. 3耗盡型MOS FET產(chǎn)品目錄選型表
  6. 0.14 MB   |  2次下載  |  免費(fèi)
  7. 4簡易光伏控制器原理圖資料
  8. 0.07 MB   |  1次下載  |  5 積分
  9. 52EDL05x06xx系列 600V半橋門驅(qū)動器帶集成自舉二極管(BSD)手冊
  10. 0.69 MB   |  1次下載  |  免費(fèi)
  11. 6國產(chǎn)千兆網(wǎng)口芯片PT153S中文資料
  12. 1.35 MB   |  次下載  |  免費(fèi)
  13. 7斯丹電子 | 用于芯片測試系統(tǒng)的射頻干簧繼電器
  14. 5.11 MB  |  次下載  |  免費(fèi)
  15. 8SFI立昌ESD/TVS管原廠代理分銷經(jīng)銷一級代理分銷經(jīng)銷
  16. 294.76 KB  |  次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935137次下載  |  10 積分
  3. 2開源硬件-PMP21529.1-4 開關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計
  4. 1.48MB  |  420064次下載  |  10 積分
  5. 3Altium DXP2002下載入口
  6. 未知  |  233095次下載  |  10 積分
  7. 4電路仿真軟件multisim 10.0免費(fèi)下載
  8. 340992  |  191448次下載  |  10 積分
  9. 5十天學(xué)會AVR單片機(jī)與C語言視頻教程 下載
  10. 158M  |  183360次下載  |  10 積分
  11. 6labview8.5下載
  12. 未知  |  81605次下載  |  10 積分
  13. 7Keil工具M(jìn)DK-Arm免費(fèi)下載
  14. 0.02 MB  |  73829次下載  |  10 積分
  15. 8LabVIEW 8.6下載
  16. 未知  |  65991次下載  |  10 積分