一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

電子發(fā)燒友App

硬聲App

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

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

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

TinyPart由objective-C編寫的iOS模塊化框架

2022-06-23 | zip | 0.84 MB | 次下載 | 免費(fèi)

資料介紹

授權(quán)協(xié)議 MIT
開發(fā)語(yǔ)言 Objective-C
軟件類型 開源軟件
所屬分類 手機(jī)/移動(dòng)開發(fā)、 iPhone/iPad開發(fā)工具

軟件簡(jiǎn)介

TinyPart 是一個(gè)由 Objective-C 編寫的面向協(xié)議的 iOS 模塊化框架,同時(shí)它還支持 URL 路由和模塊間通信機(jī)制。

安裝

cocoapods

pod 'TinyPart'

特點(diǎn)

  • 面向協(xié)議。TinyPart中模塊和服務(wù)都是面向協(xié)議的。服務(wù)面向協(xié)議的好處在于對(duì)于接口維護(hù)比較友好,任何接口的變動(dòng)在編譯時(shí)都是可見的,但是大型項(xiàng)目有可能會(huì)面臨大量需要維護(hù)的協(xié)議,這也是不可忽視的缺點(diǎn)。
  • 動(dòng)態(tài)化。TinyPart中模塊和服務(wù)的注冊(cè)都是在運(yùn)行時(shí)完成的,可以根據(jù)具體需要調(diào)整模塊的注冊(cè)和啟動(dòng)時(shí)間,異步啟動(dòng)模塊對(duì)于優(yōu)化APP首屏加載時(shí)間會(huì)有幫助。
  • 路由服務(wù)。我們知道面向協(xié)議的服務(wù)雖然對(duì)于接口維護(hù)比較方便,但是模塊間相互調(diào)用各自服務(wù),是需要知道對(duì)方協(xié)議的,這樣最后可能會(huì)導(dǎo)致所有的協(xié)議需要暴露給所有的模塊。比如現(xiàn)在有10個(gè)模塊每個(gè)模塊有1個(gè)服務(wù)協(xié)議,在上述情況下每個(gè)模塊需要知道另外9個(gè)模塊的協(xié)議,這相當(dāng)于每個(gè)協(xié)議都被@import了9次,所有協(xié)議總共將會(huì)被@import 9*10=90次,這對(duì)于想做完全代碼隔離的模塊化來(lái)說(shuō)是個(gè)噩夢(mèng)。通過(guò)路由服務(wù)則很好地平衡了模塊間調(diào)用和依賴問(wèn)題,順便也解決了跨APP跳轉(zhuǎn)的問(wèn)題。
  • URL路由。在路由基礎(chǔ)上,只需要再增加簡(jiǎn)單的1到2行代碼就可以實(shí)現(xiàn)通過(guò)APPScheme的URL路由機(jī)制。
  • 多級(jí)模塊有向通信。一般來(lái)說(shuō),完全去耦合的模塊間通信方案大概是兩種:URL和通知NSNotification。URL解決了模塊間服務(wù)相互調(diào)用的問(wèn)題,但是如果想要通過(guò)URL實(shí)現(xiàn)一個(gè)觀察者模式則會(huì)變得非常復(fù)雜。這時(shí)候大家可能會(huì)偏向于選擇通知,但是由于通知是全局性的,這樣會(huì)導(dǎo)致任何一條通知可能會(huì)被APP內(nèi)任何一個(gè)模塊所使用,久而久之這些通知會(huì)變得難以維護(hù)。 所謂多級(jí)模塊有向通信,則是在NSNotification基礎(chǔ)上對(duì)通知的傳播方向進(jìn)行了限制,底層模塊對(duì)上層模塊的通知稱為廣播Broadcast,上層模塊對(duì)底層模塊或者同層模塊的通知稱為上報(bào)Report。這樣做有兩個(gè)好處:一方面更利于通知的維護(hù),另一方面可以幫助我們劃分模塊層級(jí),如果我們發(fā)現(xiàn)有一個(gè)模塊需要向多個(gè)同級(jí)模塊進(jìn)行Report那么這個(gè)模塊很有可能應(yīng)該被劃分到更底層的模塊。

架構(gòu)說(shuō)明

poYBAGKn4w2AV_D3AARfoX6kXPA521.jpg

用法

初始化

  • 繼承 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

  • 定義并注冊(cè)一個(gè)模塊
#import "TinyPart.h"

@interface TestModule : NSObject 
@end

@implementation TestModule
TP_MODULE_AUTO_REGISTER // 自動(dòng)注冊(cè)模塊,動(dòng)態(tài)注冊(cè)模塊

TP_MODULE_ASYNC         // 異步啟動(dòng)模塊,優(yōu)化開屏性能

TP_MODULE_PRIORITY(1)   // 模塊啟動(dòng)優(yōu)先級(jí),優(yōu)先級(jí)高的先啟動(dòng)

TP_MODULE_LEVEL(TPModuleLevelBasic)     // 模塊級(jí)別:基礎(chǔ)模塊

- (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?自動(dòng)注冊(cè)宏的話,還需要將TestModule1加到TinyPart.plist配置文件中。

?

服務(wù)Service用法

  • 定義并注冊(cè)一個(gè)服務(wù)Service。Service可自定義單例模式或多例模式。
#import "TPServiceProtocol.h"

@protocol TestModuleService1 
- (void)function1;
@end

@interface TestModuleService1Imp : NSObject 
@end

@implementation TestModuleService1Imp
TPSERVICE_AUTO_REGISTER(TestModuleService1) // 自動(dòng)注冊(cè)服務(wù)

- (void)function1 {
    NSLog(@"%@", @"TestModuleService1 function1");
}
@end

如果沒有使用TPSERVICE_AUTO_REGISTER?自動(dòng)注冊(cè)宏的話,還需要將TestModuleService1加到TinyPart.plist配置文件中。

pYYBAGKn4w-AZjjLAADdmzLQVes53.jpeg

  • 訪問(wèn)服務(wù)Sevice
id service1 = [[TPServiceManager sharedInstance] serviceWithName:@"TestModuleService1"];
    [service1 function1];

路由Router用法

  • 定義并注冊(cè)一個(gè)路由Router
#import "TPRouter.h"

@interface TestRouter : TPRouter
@end
#import "TinyPart.h"

@implementation TestRouter
TPROUTER_AUTO_REGISTER  // 自動(dòng)注冊(cè)路由

// APP身份驗(yàn)證,需要實(shí)現(xiàn)TPMediatorDelegate中的身份驗(yàn)證回調(diào)
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自動(dòng)注冊(cè)宏的話,還需要將TestModuleService1加到TinyPart.plist配置文件中。

?

  • 使用路由Router
[[TPMediator sharedInstance] performAction:@"action1" router:@"Test" params:@{}];

URL路由

  • 新建TinyPart.bundle/TinyPart.plist,并注冊(cè)一條URL Scheme




	APPURLSchemes
	
		tinypart
	


  • 定義一條URL路由規(guī)則。在已有的TestRouter基礎(chǔ)上,我們只需要新建一個(gè)TPMediator+Test的擴(kuò)展。
@implementation TPMediator (Test)
+ (void)load {
    // 聲明TestRouter對(duì)應(yīng)的Host
    TPURLHostForRouter(@"com.tinypart.test", TestRouter) // tinypart://com.tinypart.test
    
    // 聲明TestRouter中action1對(duì)應(yīng)的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];

有向通信

  • 發(fā)送。這里注意前面提到的,底層模塊對(duì)上層模塊的通知稱為廣播Broadcast,上層模塊對(duì)底層模塊或者同層模塊的通知稱為上報(bào)Report。模塊級(jí)別分為Basic、Middle、Topout三個(gè)級(jí)別。
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銷毀后自動(dòng)釋放
[center1 addObserver:self selector:@selector(testNotification:) name:@"report_notification_from_TestModule2" object:nil];

?

?

?

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

評(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開發(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開關(guān)電源設(shè)計(jì)實(shí)例指南
  8. 未知  |  21549次下載  |  免費(fèi)
  9. 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
  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ì)》 溫德爾著
  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)