国产chinesehdxxxx老太婆,办公室玩弄爆乳女秘hd,扒开腿狂躁女人爽出白浆 ,丁香婷婷激情俺也去俺来也,ww国产内射精品后入国产

電子發(fā)燒友App

硬聲App

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(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
開(kāi)發(fā)語(yǔ)言 Objective-C
軟件類(lèi)型 開(kāi)源軟件
所屬分類(lèi) iOS代碼庫(kù)

軟件簡(jiǎn)介

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

pYYBAGKrCX2AD0gvAABTwfS5_OY744.jpg

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

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

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

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

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

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

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

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

生命周期的變化

事件

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

  • 系統(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ù)自定義事件

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

注冊(cè)

模塊注冊(cè)的方式有靜態(tài)注冊(cè)與動(dòng)態(tài)注冊(cè)兩種

  • 靜態(tài)注冊(cè)

通過(guò)在BeeHive.plist文件中注冊(cè)符合BHModuleProtocol協(xié)議模塊類(lèi)

poYBAGKrCYOAF-W2AAA6G49Ausw974.png

  • 動(dòng)態(tài)注冊(cè)

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

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

異步加載

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

編程開(kāi)發(fā)

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

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

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

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

如果模塊有需要啟動(dòng)時(shí)初始化的邏輯,可以在modInit里編寫(xiě),例如模塊注冊(cè)一個(gè)外部模塊可以訪問(wèn)的Service接口

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

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

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

模間調(diào)用

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

  • 基于接口的實(shí)現(xiàn)Service訪問(wèn)方式(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ù)會(huì)逐步實(shí)現(xiàn)后兩種方式

Servcie訪問(wèn)

Service訪問(wèn)的優(yōu)點(diǎn)是可以編譯時(shí)檢查發(fā)現(xiàn)接口的變更,從而及時(shí)修正接口問(wèn)題。缺點(diǎn)是需要依賴(lài)接口定義的頭文件,通過(guò)模塊增加得越多,維護(hù)接口定義的也有一定工作量。以為HomeServiceProtocol為例

  • 定義HomeServiceProtocol暴露模塊對(duì)外訪問(wèn)的接口

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

  • 聲明式注冊(cè)

@implementation?HomeService
BH_EXPORT_SERVICE()
  • API注冊(cè)

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





HomeServiceProtocol
BHViewController

  • 調(diào)用

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

單例與多例

對(duì)于有些場(chǎng)景下,我們?cè)L問(wèn)每個(gè)聲明為service的對(duì)象,希望對(duì)象能保留一些狀態(tài),那我們需要聲明這個(gè)service對(duì)象是一個(gè)單例對(duì)象。

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

聲明

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

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

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

上下文環(huán)境Context

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

-?(BOOL)application:(UIApplication?*)application?didFinishLaunchingWithOptions:(NSDictionary?*)launchOptions
{
[BHContext?shareInstance].env?=?BHEnvironmentDev;?//定義應(yīng)用的運(yùn)行開(kāi)發(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

?

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

評(píng)論

查看更多

下載排行

本周

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

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費(fèi)
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費(fèi)
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費(fèi)
  7. 4開(kāi)關(guān)電源設(shè)計(jì)實(shí)例指南
  8. 未知  |  21549次下載  |  免費(fèi)
  9. 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書(shū))
  10. 0.00 MB  |  15349次下載  |  免費(fèi)
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費(fèi)
  13. 7電子制作實(shí)例集錦 下載
  14. 未知  |  8113次下載  |  免費(fèi)
  15. 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德?tīng)栔?/a>
  16. 0.00 MB  |  6656次下載  |  免費(fèi)

總榜

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