CTMediator在iOS模块化/组件化开发中的应用

本文介绍了CTMediator在iOS模块化/组件化开发中的应用,包括其工作原理和使用方法。CTMediator通过目标-动作的方式实现组件间通信,降低耦合度,提高开发效率。内容涵盖了CTMediator的源码分析,远程调用和本地调用的工作流程,以及如何在项目中引入和使用CTMediator。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        模块化和组件化在当下的iOS开发中已经深入人心,App的代码不会全部都放在一个主工程里。尤其是开发人员越来越多,业务越来越复杂,代码量越来越多,模块化/组件化开发变得尤为重要。这样做的好处有:

  • 解耦:避免代码严重合耦,增加复用和扩展难度;
  • 结构清晰,易读,易维护;
  • 开发效率高:可独立开发、测试、维护每个模块或组件,开发效率高。

       目前组件化开发的方式大约有三种:protocol - class、url - block以及CTMediator target - action方案。博主在项目中使用到的是CTMediator target - action方案,本文将介绍CTMediator的使用,博客大纲如下。

图1 大纲内容

 

 

1.CTMediator工作原理

1.1 源码分析

图1.1 CTMediator源码结构截图

 

       CTMediator的源码就2个文件和2个m文件。核心的代码在CTMediator.m中,而CTMediator+HandyTools扩展类的作用是实现ViewContronller的切换。

       查看CTMediator.h文件可以看到,它支持远程App调用和本地组件调用两种方式。

#import <Foundation/Foundation.h>

extern NSString * _Nonnull const kCTMediatorParamsKeySwiftTargetModuleName;

@interface CTMediator : NSObject

+ (instancetype _Nonnull)sharedInstance;

// 远程App调用入口
- (id _Nullable)performActionWithUrl:(NSURL * _Nullable)url completion:(void(^_Nullable)(NSDictionary * _Nullable info))completion;
// 本地组件调用入口
- (id _Nullable )performTarget:(NSString * _Nullable)targetName action:(NSString * _Nullable)actionName params:(NSDictionary * _Nullable)params shouldCacheTarget:(BOOL)shouldCacheTarget;
- (void)releaseCachedTargetWithFullTargetName:(NSString * _Nullable)fullTargetName;

@end
  
// 简化调用单例的函数
CTMediator* _Nonnull CT(void);
  • 远程调用

       通过scheme://[target]/[action]?[params]调用。回调写在AppDelegate中,暴露的scheme写在info.plist中。如果你对微信登录非常熟悉的话,那么理解CTMediator的远程调用就非常容易了。其做法是一样的。我们查看CTMediator.m的代码,看看如何实现远程调用的,代码分析如下:

/*
 scheme://[target]/[action]?[params]
 
 url sample:
 aaa://targetA/actionB?id=1234
 */

- (id)performActionWithUrl:(NSURL *)url completion:(void (^)(NSDictionary *))completion
{
    if (url == nil||![url isKindOfClass:[NSURL class]]) {
        return nil;
    }
    
    NSMutableDictionary *params = [[NSMutableDictionary alloc] init];
    NSURLComponents *urlComponents = [[NSURLComponents alloc] initWithString:url.absoluteString];
    // 遍历所有参数
    [urlComponents.queryIt
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值