iOS 组件化初步构思

 更新时间:2023年03月24日 15:22:50   作者:VE视频引擎  
这篇文章主要介绍了iOS组件化初步构思,并对iOS组件化常用方式的讨论进行了方案分析,以便帮助大家对ios组件化有一个深刻的了解

一、iOS 组件化常用方式讨论

使用openURL进行组件的注册和调用

App 启动时实例化各组件模块,然后这些组件向 ModuleManager 注册 URL ,有些时候不需要实例化,使用 class 注册。
当组件A需要调用组件B时,向 ModuleManager 传递 URL ,参数跟随 URL 以 GET 方式传递,类似openURL 。然后由 ModuleManager 负责调度组件B,最后完成任务。

方案分析

第一步的问题,在组件化的过程中,注册 URL 并不是充分必要条件,组件是不需要向组件管理器注册Url的。而且注册了 URL 之后,会造成不必要的内存常驻,如果只是注册Class,内存常驻量就小一点,如果是注册实例,内存常驻量就大了。

第二步。在 iOS 领域里,一定是组件化的中间件为 openURL 提供服务,而不是 openURL 方式为组件化提供服务。

问题在于无法表达非常规对象。
如果是传递复杂对象,如 UIImage ,只能做如下表达

[a openUrl:@"http://baidu.com/detail" 
    params:@{
        @"id":"abc123",
        @"type":"1",
        @"image":[UIImage imageNamed:@"iOSImage"]}
]

如果不像上面这么做,复杂参数和非常规参数就无法传递。如果这么做了,那么事实上这就是拆分远程调用和本地调用的入口了。

URL 注册对于实施组件化方案是不必要的,且通过 URL 注册的方式形成的组件化方案,拓展性和可维护性都会被打折。

注册 URL 的目的其实是一个服务发现的过程,在 iOS 领域中,服务发现的方式是不需要通过主动注册的,使用 runtime 就可以了。另外,注册部分的代码的维护是一个相对麻烦的事情,每一次支持新调用时,都要去维护一次注册列表。如果有调用被弃用了,是经常会忘记删项目的。runtime 由于不存在注册过程,那就也不会产生维护的操作,维护成本就降低了。

二、对组件化的构思

以上方式主要是基于 Mediator 模式和 Target-Action 模式,中间采用了 Runtime 来完成调用。这套组件化方案将远程应用调用和本地应用调用做了拆分,而且是由本地应用调用为远程应用调用提供服务,与常用方案正好相反。

调用方式

先说本地应用调用,本地组件A在某处调用

[[Mediator sharedInstance] performTarget:targetName action:actionName params:@{…}]

向 Mediator 发起跨组件调用,Mediator 根据获得的 target 和 action 信息,通过 Objective-C 的 runtime 转化生成 target 实例以及对应的 action 选择子,然后最终调用到目标业务提供的逻辑,完成需求。

在远程应用调用中,远程应用通过 openURL 的方式,由iOS系统根据 info.plist 里的 scheme 配置找到可以响应 URL 的应用,应用通过 AppDelegate 接收到URL之后,调用 Mediator 的 openUrl: 方法将接收到的URL信息传入。当然, Mediator 也可以用 openUrl:options: 的方式顺便把随之而来的option 也接收,这取决于你本地业务执行逻辑时的充要条件是否包含 option 数据。传入 URL 之后,Mediator 通过解析 URL ,将请求路由到对应的 target 和 action ,随后的过程就变成了上面说过的本地应用调用的过程了,最终完成响应。

以上就是iOS 组件化初步构思的详细内容,更多关于ios组件化常用方式的资料请关注脚本之家其它相关文章。也希望大家可以多多关注脚本之家,后续我们将带来更精彩的更新!

相关文章

  • safari调试iOS app web页面的步骤

    safari调试iOS app web页面的步骤

    这篇文章主要为大家详细介绍了safari调试iOS app web页面的步骤,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • IOS 避免self循环引用的方法的实例详解

    IOS 避免self循环引用的方法的实例详解

    这篇文章主要介绍了IOS 避免self循环引用的方法的实例详解的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下
    2017-09-09
  • iOS图片拉伸技巧小结

    iOS图片拉伸技巧小结

    这篇文章主要为大家详细介绍了iOS图片拉伸的技巧,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • UICollectionView 实现图片浏览效果

    UICollectionView 实现图片浏览效果

    这篇文章主要为大家介绍了UICollectionView 实现图片浏览效果示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • iOS开发KVO实现细节解密

    iOS开发KVO实现细节解密

    这篇文章主要为大家介绍了iOS开发KVO实现细节解密,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • iOS 10 推送高阶篇(必看)

    iOS 10 推送高阶篇(必看)

    本文重点给大家介绍ios10 推送的所有通知类,所以说这篇教程是ios10推送必看篇,感兴趣的朋友快来一起学习吧
    2016-09-09
  • iOS中生成指定大小、指定颜色的二维码和条形码方法详解

    iOS中生成指定大小、指定颜色的二维码和条形码方法详解

    本文主要介绍了iOS中生成指定大小、指定颜色的二维码和条形码的具体实现方法,具有一定的参考价值,下面跟着小编一起来看下吧
    2016-12-12
  • Swift Self详解及简单实例代码

    Swift Self详解及简单实例代码

    这篇文章主要介绍了Swift Self详解及简单实例代码的相关资料,这里对self 进行了详细介绍并附实例代码,需要的朋友可以参考下
    2016-12-12
  • IOS 通过tag删除动态创建的UIButton

    IOS 通过tag删除动态创建的UIButton

    这篇文章主要介绍了IOS 通过tag删除动态创建的UIButton的相关资料,需要的朋友可以参考下
    2017-03-03
  • IOS中UIWebView的使用详解

    IOS中UIWebView的使用详解

    这篇文章主要介绍了IOS中UIWebView的使用详解,涉及到初始化与三种加载方式,一些常用的属性和变量及ios7中的一些新特征,本文介绍的非常详细,感兴趣的朋友一起学习吧
    2016-02-02

最新评论