女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

電子發燒友App

硬聲App

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示
電子發燒友網>電子資料下載>電子資料>TinyPart由objective-C編寫的iOS模塊化框架

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

2022-06-23 | zip | 0.84 MB | 次下載 | 免費

資料介紹

授權協議 MIT
開發語言 Objective-C
軟件類型 開源軟件
所屬分類 手機/移動開發、 iPhone/iPad開發工具

軟件簡介

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那么這個模塊很有可能應該被劃分到更底層的模塊。

架構說明

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

  • 定義并注冊一個模塊
#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配置文件中。

pYYBAGKn4w-AZjjLAADdmzLQVes53.jpeg

  • 訪問服務Sevice
id service1 = [[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];

?

?

?

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

評論

查看更多

下載排行

本周

  1. 1蘇泊爾電磁爐線路的電路原理圖資料合集
  2. 2.02 MB   |  286次下載  |  5 積分
  3. 2長虹液晶電視R-HS310B-5HF01的電源板電路原理圖
  4. 0.46 MB   |  87次下載  |  5 積分
  5. 3AO4803A雙P通道增強型場效應晶體管的數據手冊
  6. 0.11 MB   |  28次下載  |  2 積分
  7. 4長虹液晶彩電LS29機芯的技術資料說明
  8. 3.42 MB   |  16次下載  |  2 積分
  9. 5AI智能眼鏡產業鏈分析
  10. 4.43 MB   |  14次下載  |  免費
  11. 6TP4055 500mA線性鋰離子電池充電器中文手冊
  12. 0.75 MB   |  9次下載  |  免費
  13. 7TP4054 400mA線性鋰離子電池充電器中文手冊
  14. 0.70 MB   |  2次下載  |  免費
  15. 8TP4057X 500mA線性鋰離子電池充電器中文手冊
  16. 0.74 MB   |  2次下載  |  免費

本月

  1. 1人形機器人電機驅動和傳感報告
  2. 4.27 MB   |  475次下載  |  免費
  3. 2蘇泊爾電磁爐線路的電路原理圖資料合集
  4. 2.02 MB   |  286次下載  |  5 積分
  5. 3長虹液晶電視R-HS310B-5HF01的電源板電路原理圖
  6. 0.46 MB   |  87次下載  |  5 積分
  7. 4U盤一鍵制作
  8. 23.84 MB   |  41次下載  |  免費
  9. 5AO4803A雙P通道增強型場效應晶體管的數據手冊
  10. 0.11 MB   |  28次下載  |  2 積分
  11. 6Altium Designer元件庫
  12. 17.11 MB   |  26次下載  |  免費
  13. 7長虹液晶彩電LS29機芯的技術資料說明
  14. 3.42 MB   |  16次下載  |  2 積分
  15. 8AI智能眼鏡產業鏈分析
  16. 4.43 MB   |  14次下載  |  免費

總榜

  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  |  191382次下載  |  10 積分
  9. 5十天學會AVR單片機與C語言視頻教程 下載
  10. 158M  |  183342次下載  |  10 積分
  11. 6labview8.5下載
  12. 未知  |  81586次下載  |  10 積分
  13. 7Keil工具MDK-Arm免費下載
  14. 0.02 MB  |  73815次下載  |  10 積分
  15. 8LabVIEW 8.6下載
  16. 未知  |  65988次下載  |  10 積分