当前位置:首页 » 《关注互联网》 » 正文

ios组件化_刘姥姥爱学习的博客

1 人参与  2021年09月04日 09:23  分类 : 《关注互联网》  评论

点击全文阅读


组件化

(说白了就是个解耦合的过程)

  • 组件化的意义

适用于基础功能稳定,项目规模较大
项目变大,编译时间长,基础模块的产品间复用
多团队发布,集成,测试不便,协同开相互依跟冲突

  • 组件化拆分

工具类,基础功能,基础UI控件,业务线

  • 组件化通信选型

Target- Action

●抽离业务逻辑
●通过中间层进行调用
●中间层使用runtime反射
●中间层代码优化

URL Scheme

●使URL处理本地的跳转
●通过中间层进行注册&调用
●注册表无需使用反射
●非懒加载/注册表的维护/参数

Protocol-Class

增加 Protocol Wrapper层
中间件返回Protocol对应的Class
解决硬编码的问题

简单演示Target- Action

点击列表跳转到底层页解耦 内容页列表页

  • 创建一个类 Mediator,所有类用这个作为中转
  • 我们希望Mediator跟任何类也没有耦合
    第一个类展示
 __kindof UIViewController *detailController = [GTMediator detailViewControllerWithUrl:item.articleUrl];

中间代码

 + (__kindof UIViewController *)detailViewControllerWithUrl:(NSString *)detailUrl{
 Class detailCls = NSClassFromString(@"GTDetailViewController");
    UIViewController *controller = [[detailCls alloc] performSelector:NSSelectorFromString(@"initWithUrlString:") withObject:detailUrl];
    return controller;
}

上面两个都是用字符串来反射出类 还有类的方法的

第一个类调用Mediator来解开跟Detali的耦合
然而中间代码又利用反射机制解开跟detail的耦合

我们再看一下
在这里插入图片描述

这个以对象作为参数向接收方发送消息的方法只能传递一个参数,有局限性
二是他使用NSString硬编码

在这里我们复习一下__kindof
kindof定义
instancetyp跟id详解

urlScheme

**

简单来说就是讲需要暴露出的detail注册到中间的dediator

**
中间层

typedef void(^GTMediatorProcessBlock)(NSDictionary *params);
+ (void)registerScheme:(NSString *)scheme processBlock:(GTMediatorProcessBlock)processBlock;
+ (void)openUrl:(NSString *)url params:(NSDictionary *)params;

注册

+ (void)load {
    [GTMediator registerScheme:@"detail://" processBlock:^(NSDictionary * _Nonnull params) {
        NSString *url = (NSString *)[params objectForKey:@"url"];
        UINavigationController *navigationController = (UINavigationController *)[params objectForKey:@"controller"];
        GTDetailViewController *controller = [[GTDetailViewController alloc] initWithUrlString:url];
//        controller.title = [NSString stringWithFormat:@"%@", @(indexPath.row)];
        [navigationController pushViewController:controller animated:YES];
    }];
    
    [GTMediator registerProtol:@protocol(GTDetailViewControllerProtocol) class:[self class]];
}

调用者

 [GTMediator openUrl:@"detail" params:@{@"url":item.articleUrl,@"controller":self.navigationController}];

弊端很多不建议使用

Protocol-Class

在mediator中添加方法

//protol class
+ (void)registerProtol:(Protocol *)proto class:(Class)cls;//注册protocol跟class的关系
+ (Class)classForProtocol:(Protocol *)proto;//通过protocol返回class

实现方法

#pragma mark -
+ (NSMutableDictionary *)mediatorCache{
    static NSMutableDictionary *cache;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        cache = @{}.mutableCopy;
    });
    return cache;
}

@protocol GTDetailViewControllerProtocol <NSObject>

- (__kindof UIViewController *)detailViewControllerWithUrl:(NSString *)detailUrl;

@end

+ (void)registerProtol:(Protocol *)proto class:(Class)cls{
    if (proto && cls) {//如果两个都不为空那么就通过协议来 跟class加入到字典里面
        [[[self class] mediatorCache] setObject:cls forKey:NSStringFromProtocol(proto)];
    }
}
+ (Class)classForProtocol:(Protocol *)proto{
    //通过协议在字典里面寻找key
    return [[[self class] mediatorCache] objectForKey:NSStringFromProtocol(proto)];
}

调用者

Class cls = [GTMediator classForProtocol:@protocol(GTDetailViewControllerProtocol)];
	[self.navigationController pushViewController:[[cls alloc] detailViewControllerWithUrl:item.articleUrl] animated:YES];

	[[NSUserDefaults standardUserDefaults] setBool:YES forKey:item.uniqueKey];

注册的人

  [GTMediator registerProtol:@protocol(GTDetailViewControllerProtocol) class:[self class]];

制作不易,记得点赞


点击全文阅读


本文链接:http://m.zhangshiyu.com/post/26965.html

中间层  耦合  注册  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 繁花盛意难平全书+后续+结局(陆依霜轩辕翊)全书列表_繁花盛意难平(陆依霜轩辕翊)繁花盛意难平全书+后续+结局在线
  • 全球灾变:我有一座恐怖屋全文免费在线阅读_[钟无咎林澜]全文免费无弹窗阅读_笔趣阁
  • 「乖巧面具撕碎那天,全网求我别黑化」章节多结局预体验‌_宋且微萧淮无弹窗阅读
  • (番外)+(全书)日暮青山绿渐隐全书+后续+结局(日暮青山绿渐隐全书+后续+结局)_许星森纪冰雪列表_笔趣阁(日暮青山绿渐隐全书+后续+结局)
  • [我预见了所有悲剧,除了爱]最新章节在线阅读_「白月光」小说无删减版在线免费阅读
  • (番外)+(全书)爱若有天意,兜转终可回全书+后续+结局(宋清澜萧沉)_爱若有天意,兜转终可回全书+后续+结局列表_笔趣阁(爱若有天意,兜转终可回全书+后续+结局)
  • [繁花盛意难平]小说节选推荐_陆依霜轩辕翊陆青仪节选推荐
  • [纵她追悔,爱已成荒芜]小说精彩节选推荐_「苏萌林澈白月光」小说精彩节选试读
  • [老婆让我别拦着她嫁豪门]小说节选免费试读_[屈英哲韩海雪温文尔雅]精彩章节分享
  • 青梅诱人竹马男主轻点宠(许嘉易顾思瑜)全书浏览_青梅诱人竹马男主轻点宠全书浏览
  • 阮雾梨闻砚辞人面桃花长相忆结局+番外(阮雾梨闻砚辞)_人面桃花长相忆结局+番外阮雾梨闻砚辞列表_笔趣阁(阮雾梨闻砚辞)
  • 人面桃花长相忆闻砚辞结局+番外+续集(阮雾梨闻砚辞)结局_(阮雾梨闻砚辞人面桃花长相忆闻砚辞结局+番外+续集全书结局)结局(阮雾梨闻砚辞)

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1