美文网首页
iOS 组件化方案

iOS 组件化方案

作者: 再好一点点 | 来源:发表于2018-04-10 17:57 被阅读0次

一个 APP 有多个模块,模块之间会通信,互相调用. 一个功能复杂的界面难免会在里边引入很多其他类的头文件, 使得代码耦合度很高, 为了解决这个问题需要引入组件化方案

首先需要一个Mediator类

//Mediator.h 类

@interfaceMediator :NSObject

+ (Mediator*)shareInstance;

- (id)performTarget:(NSString*)target action:(NSString*)action param:(NSDictionary*)parame;

@end

#import "Mediator.h"

@implementation Mediator

+ (Mediator*)shareInstance {

    staticMediator*s =nil;

    staticdispatch_once_tonceToken;

    dispatch_once(&onceToken, ^{

        s = [[Mediatoralloc]init];

    });

    returns;

}

//抽离出来所有的target以及action

- (id)performTarget:(NSString*)target action:(NSString*)action param:(NSDictionary*)parame {

    Class cls =NSClassFromString(target);

    idtarget Obj = [[cls alloc]init];

    SEL actionSEL = NSSelectorFromString([NSString stringWithFormat:@"action_%@", action]);

    if([targetObj respondsToSelector: actionSEL]) {

#pragma clang diagnostic push

#pragma clang diagnostic ignored"-Warc-performSelector-leaks"

        return [targetObj performSelector:actionSEL withObject:parame];

#pragma clang diagnostic pop

    }

    return nil;

}

对于每个模块都需要有自己的mediator, 所以对于每个模块都写一个分类

#import "Mediator.h"

@interfaceMediator (ViewControllerAction)

- (UIViewController*)Mediator_viewController1With:(NSDictionary*)parame;

- (UIViewController*)Mediator_viewController2With:(NSDictionary*)parame;

@end

#import "Mediator+ViewControllerAction.h"

@implementationMediator (ViewControllerAction)

- (UIViewController*)Mediator_viewController1With:(NSDictionary*)parame {

    UIViewController *VC = [self performTarget:@"ViewController1" action:@"viewcontroller1WithId:" param:parame];

    returnVC;

}

- (UIViewController*)Mediator_viewController2With:(NSDictionary*)parame {

    UIViewController *VC = [self performTarget:@"ViewController2" action:@"viewcontroller2WithId:" param:parame];

    returnVC;

}

@end

在需要被创建的类里边写各自需要的代码逻辑  如下

@implementationViewController1

- (UIViewController*)action_viewcontroller1WithId:(NSMutableDictionary*)param  {

    ViewController1 *VC = [[ViewController1 alloc] init];

    VC.ID= param[@"id"];

    returnVC;

}

在需要被创建的类里边写各自需要的代码逻辑  如下

@implementationViewController2

- (UIViewController*)action_viewcontroller2WithId:(NSMutableDictionary*)param  {

    ViewController2 *VC = [[ViewController2 alloc] init];

    VC.ID= param[@"id"];

    returnVC;

}

最后在需要创建的地方调用就可以了  如:

UIViewCOntroller *VC =  [[Mediator shareInstance] Mediator_viewController1With:{@"id":@"1"}];

这样就拿到了需要创建的对象

相关文章

  • iOS组件化方案

    iOS组件化方案 iOS组件化方案

  • 组件化方案

    组件化方案引用 在现有工程中实施基于CTMediator的组件化方案 iOS组件化实践(一):简介 iOS组件化实...

  • iOS组件化文章汇总

    iOS应用架构谈 组件化方案 APP组件化之路 我所理解的组件化之路 iOS 组件化方案探索 围观神仙打架,反革命...

  • 07 CTMediator iOS组件化方案

    关于iOS组件化方案在Casa的iOS应用架构谈 组件化方案写得已经很清楚了。方案本身并不难,CTMediator...

  • iOS组件化 文章

    iOS组件化 BeeHive iOS应用架构谈 组件化方案 Small iOS BeeHive —— 一个优雅但还...

  • iOS 组件化/模块化文章

    1.博客文章总结 iOS组件化思路-大神博客研读和思考iOS组件化实践方案-LDBusMediator炼就组件化架...

  • iOS系统架构

    1: 滴滴出行iOS客户端架构演进之路 2: iOS应用架构谈 组件化方案 3:iOS组件化方案调研 4: 饿了么...

  • iOS有关架构组件化的文章链接

    iOS应用架构谈 组件化方案 iOS 组件化方案探索 iOS移动端架构的那些事 如何优雅的实现界面跳转 之 统跳协...

  • iOS应用架构谈 组件化方案

    iOS应用架构谈 组件化方案

  • iOS组件化

    0.ios组件化/模块化1.iOS 组件化开发项目框架设计2.iOS 组件二进制化方案3.组件化4.Seemygo...

网友评论

      本文标题:iOS 组件化方案

      本文链接:https://www.haomeiwen.com/subject/pyvnhftx.html