資料介紹
軟件簡介
TinyPart 是一個由 Objective-C 編寫的面向協議的 iOS 模塊化框架,同時它還支持 URL 路由和模塊間通信機制。
安裝
cocoapods
pod 'TinyPart'
特點
- 面向協議。TinyPart中模塊和服務都是面向協議的。服務面向協議的好處在于對于接口維護比較友好,任何接口的變動在編譯時都是可見的,但是大型項目有可能會面臨大量需要維護的協議,這也是不可忽視的缺點。
- 動態化。TinyPart中模塊和服務的注冊都是在運行時完成的,可以根據具體需要調整模塊的注冊和啟動時間,異步啟動模塊對于優化APP首屏加載時間會有幫助。
- 路由服務。我們知道面向協議的服務雖然對于接口維護比較方便,但是模塊間相互調用各自服務,是需要知道對方協議的,這樣最后可能會導致所有的協議需要暴露給所有的模塊。比如現在有10個模塊每個模塊有1個服務協議,在上述情況下每個模塊需要知道另外9個模塊的協議,這相當于每個協議都被@import了9次,所有協議總共將會被@import 9*10=90次,這對于想做完全代碼隔離的模塊化來說是個噩夢。通過路由服務則很好地平衡了模塊間調用和依賴問題,順便也解決了跨APP跳轉的問題。
- URL路由。在路由基礎上,只需要再增加簡單的1到2行代碼就可以實現通過APPScheme的URL路由機制。
-
多級模塊有向通信。一般來說,完全去耦合的模塊間通信方案大概是兩種:URL和通知
NSNotification
。URL解決了模塊間服務相互調用的問題,但是如果想要通過URL實現一個觀察者模式則會變得非常復雜。這時候大家可能會偏向于選擇通知,但是由于通知是全局性的,這樣會導致任何一條通知可能會被APP內任何一個模塊所使用,久而久之這些通知會變得難以維護。 所謂多級模塊有向通信,則是在NSNotification
基礎上對通知的傳播方向進行了限制,底層模塊對上層模塊的通知稱為廣播Broadcast
,上層模塊對底層模塊或者同層模塊的通知稱為上報Report
。這樣做有兩個好處:一方面更利于通知的維護,另一方面可以幫助我們劃分模塊層級,如果我們發現有一個模塊需要向多個同級模塊進行Report
那么這個模塊很有可能應該被劃分到更底層的模塊。
架構說明
用法
初始化
- 繼承 TPAppDelegate,初始化TPContext
#import "TinyPart.h" @interface AppDelegate : TPAppDelegate @property (strong, nonatomic) UIWindow *window; @end @implementation AppDelegate @synthesize window; - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [TPMediator sharedInstance].deleagate = self; [TPContext sharedContext].launchOptions = launchOptions; [TPContext sharedContext].application = application; context.configPlistFileName = @"TinyPart.bundle/TinyPart.plist"; context.modulePlistFileName = @"TinyPart.bundle/TinyPart.plist"; context.servicePlistFileName = @"TinyPart.bundle/TinyPart.plist"; context.routerPlistFileName = @"TinyPart.bundle/TinyPart.plist"; [TinyPart sharedInstance].context = [TPContext sharedContext]; return [super application:application didFinishLaunchingWithOptions:launchOptions]; } @end
- 新建 plist 文件 'TinyPart.bundle/TinyPart.plist'
模塊Module
- 定義并注冊一個模塊
#import "TinyPart.h" @interface TestModule : NSObject@end @implementation TestModule TP_MODULE_AUTO_REGISTER // 自動注冊模塊,動態注冊模塊 TP_MODULE_ASYNC // 異步啟動模塊,優化開屏性能 TP_MODULE_PRIORITY(1) // 模塊啟動優先級,優先級高的先啟動 TP_MODULE_LEVEL(TPModuleLevelBasic) // 模塊級別:基礎模塊 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { return YES; } - (void)moduleDidLoad:(TPContext *)context { switch (context.env) { case TPRunningEnviromentTypeDebug: { NSLog(@"%@", @"TestModule1 moduleDidLoad: debug"); break; } case TPRunningEnviromentTypeRelease: { NSLog(@"%@", @"TestModule1 moduleDidLoad: release"); break; } } } @end
如果沒有使用TP_MODULE_AUTO_REGISTER?
自動注冊宏的話,還需要將TestModule1加到TinyPart.plist
配置文件中。
?
服務Service用法
- 定義并注冊一個服務Service。Service可自定義單例模式或多例模式。
#import "TPServiceProtocol.h" @protocol TestModuleService1- (void)function1; @end @interface TestModuleService1Imp : NSObject @end @implementation TestModuleService1Imp TPSERVICE_AUTO_REGISTER(TestModuleService1) // 自動注冊服務 - (void)function1 { NSLog(@"%@", @"TestModuleService1 function1"); } @end
如果沒有使用TPSERVICE_AUTO_REGISTER?
自動注冊宏的話,還需要將TestModuleService1加到TinyPart.plist
配置文件中。
- 訪問服務Sevice
idservice1 = [[TPServiceManager sharedInstance] serviceWithName:@"TestModuleService1"]; [service1 function1];
路由Router用法
- 定義并注冊一個路由Router
#import "TPRouter.h" @interface TestRouter : TPRouter @end #import "TinyPart.h" @implementation TestRouter TPROUTER_AUTO_REGISTER // 自動注冊路由 // APP身份驗證,需要實現TPMediatorDelegate中的身份驗證回調 TPRouter_AUTH_REQUIRE(@"action1", @"action2") TPROUTER_METHOD_EXPORT(action1, { NSLog(@"TestRouter action1 params=%@", params); return nil; }); TPROUTER_METHOD_EXPORT(action2, { NSLog(@"TestRouter action2 params=%@", params); return nil; }); @end
如果沒有使用TPROUTER_AUTO_REGISTER
自動注冊宏的話,還需要將TestModuleService1加到TinyPart.plist
配置文件中。
?
- 使用路由Router
[[TPMediator sharedInstance] performAction:@"action1" router:@"Test" params:@{}];
URL路由
-
新建
TinyPart.bundle/TinyPart.plist
,并注冊一條URL Scheme
APPURLSchemes
tinypart
-
定義一條URL路由規則。在已有的
TestRouter
基礎上,我們只需要新建一個TPMediator+Test
的擴展。
@implementation TPMediator (Test) + (void)load { // 聲明TestRouter對應的Host TPURLHostForRouter(@"com.tinypart.test", TestRouter) // tinypart://com.tinypart.test // 聲明TestRouter中action1對應的Path TPURLPathForActionForRouter(@"/action1", action1, TestRouter); // tinypart://com.tinypart.test/action1 } @end
- 使用URL路由
NSURL *url = [NSURL URLWithString:@"tinypart://com.tinypart.test/action1?id=1&name=tinypart"]; [[TPMediator sharedInstance] openURL:url];
有向通信
-
發送。這里注意前面提到的,底層模塊對上層模塊的通知稱為廣播
Broadcast
,上層模塊對底層模塊或者同層模塊的通知稱為上報Report
。模塊級別分為Basic、Middle、Topout三個級別。
TPNotificationCenter *center2 = [TestModule2 tp_notificationCenter]; [center2 reportNotification:^(TPNotificationMaker *make) { make.name(@"report_notification_from_TestModule2"); } targetModule:@"TestModule1"]; [center2 broadcastNotification:^(TPNotificationMaker *make) { make.name(@"broadcast_notification_from_TestModule2").userInfo(@{@"key":@"value"}).object(self); }];
- 接收
TPNotificationCenter *center1 = [TestModule1 tp_notificationCenter]; // Observer銷毀后自動釋放 [center1 addObserver:self selector:@selector(testNotification:) name:@"report_notification_from_TestModule2" object:nil];
?
?
- 電路模塊化電路圖紙參考設計 15次下載
- 模塊化逆變電源的設計與應用總結
- 電賽模塊化程序案例下載 12次下載
- FPGA模塊化設計與AlteraHardCopy結構化ASIC 6次下載
- 如何從Java轉型Objective-C的詳細資料分析 2次下載
- Objective-C與Runtime的詳細資料介紹讓你不在問為什么 3次下載
- ObjectiveC-Class-Ivar-Layout的使用方法詳解 2次下載
- objective-c簡體中文手冊 14次下載
- 基于Objective-C實現動態加載 2次下載
- 單片機的C語言模塊化編程 51次下載
- 從Objective-C向Swift轉換經驗分享 0次下載
- 第15章objective-C編程語言 0次下載
- Objective-C基礎教程 2次下載
- 模塊化程序設計 0次下載
- 模塊化程序設計 9次下載
- 模塊化插座接線方法有哪些 697次閱讀
- LumiDL TM模塊化照明器介紹 783次閱讀
- 模塊化原理和方法 模塊化的方法和注意事項 2936次閱讀
- PLC模塊化和結構化編程實例 1091次閱讀
- 模塊化機柜 vs.一體化機柜 745次閱讀
- 如何模塊化編程 1338次閱讀
- 基于一種模塊化的LED顯示屏設計 2037次閱讀
- 模塊化水表采集器的原理及設計 2126次閱讀
- 關于類別化與模塊化設計模式的解釋 5467次閱讀
- 解讀:一種基于模塊化設計的PLM平臺建設 1755次閱讀
- 手機射頻前端模塊化趨勢大講解 8592次閱讀
- 為什么選擇Caffe深度學習框架Caffe的安裝和程序概述 4268次閱讀
- 模塊化UPS電源的構成以及優缺點盤點 7273次閱讀
- 模塊化電源有什么優勢 6755次閱讀
- 基于DSP的模塊化教育機器人硬件系統方案 2285次閱讀
下載排行
本周
- 1蘇泊爾電磁爐線路的電路原理圖資料合集
- 2.02 MB | 286次下載 | 5 積分
- 2長虹液晶電視R-HS310B-5HF01的電源板電路原理圖
- 0.46 MB | 87次下載 | 5 積分
- 3AO4803A雙P通道增強型場效應晶體管的數據手冊
- 0.11 MB | 28次下載 | 2 積分
- 4長虹液晶彩電LS29機芯的技術資料說明
- 3.42 MB | 16次下載 | 2 積分
- 5AI智能眼鏡產業鏈分析
- 4.43 MB | 14次下載 | 免費
- 6TP4055 500mA線性鋰離子電池充電器中文手冊
- 0.75 MB | 9次下載 | 免費
- 7TP4054 400mA線性鋰離子電池充電器中文手冊
- 0.70 MB | 2次下載 | 免費
- 8TP4057X 500mA線性鋰離子電池充電器中文手冊
- 0.74 MB | 2次下載 | 免費
本月
- 1人形機器人電機驅動和傳感報告
- 4.27 MB | 475次下載 | 免費
- 2蘇泊爾電磁爐線路的電路原理圖資料合集
- 2.02 MB | 286次下載 | 5 積分
- 3長虹液晶電視R-HS310B-5HF01的電源板電路原理圖
- 0.46 MB | 87次下載 | 5 積分
- 4U盤一鍵制作
- 23.84 MB | 41次下載 | 免費
- 5AO4803A雙P通道增強型場效應晶體管的數據手冊
- 0.11 MB | 28次下載 | 2 積分
- 6Altium Designer元件庫
- 17.11 MB | 26次下載 | 免費
- 7長虹液晶彩電LS29機芯的技術資料說明
- 3.42 MB | 16次下載 | 2 積分
- 8AI智能眼鏡產業鏈分析
- 4.43 MB | 14次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935127次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
- 1.48MB | 420064次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233089次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費下載
- 340992 | 191382次下載 | 10 積分
- 5十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183342次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81586次下載 | 10 積分
- 7Keil工具MDK-Arm免費下載
- 0.02 MB | 73815次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65988次下載 | 10 積分
評論