iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >iOS组件化源码分析
  • 609
分享到

iOS组件化源码分析

2023-07-05 16:07:33 609人浏览 独家记忆
摘要

这篇“iOS组件化源码分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“ioS组件化源码分析”文章吧。一、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 由于不存在注册过程,那就也不会产生维护的操作,维护成本就降低了。

二、对组件化的构思

iOS组件化源码分析

以上方式主要是基于 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组件化源码分析”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网精选频道。

--结束END--

本文标题: iOS组件化源码分析

本文链接: https://www.lsjlt.com/news/353264.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • iOS组件化源码分析
    这篇“iOS组件化源码分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“iOS组件化源码分析”文章吧。一、iOS 组件化常用...
    99+
    2023-07-05
  • 源码分析Django的message组件
    目录Django的Message组件(源码分析)1. 配置2. 设置值3. 读取值4. 源码分析4.1第一步: 设置值4.2 第二步: 读取值Django的Message组件(源码分...
    99+
    2023-05-18
    Django message组件 Django message
  • Android Jetpack组件LiveData源码分析
    本篇内容主要讲解“Android Jetpack组件LiveData源码分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Android Jetpack组件LiveData源...
    99+
    2023-07-05
  • tdesignvue初始化组件源码解析
    目录前言源码脚本的入口创建目录内容写入删除目录删除导入语句总结前言 Tdesign-vue 是一由腾讯开源的 Vue.js 组件库。我们知道,这些大型的组件库业务覆盖面很广,基本都包...
    99+
    2022-12-21
    tdesign vue初始化组件 tdesign vue
  • Vue3源码分析组件挂载初始化props与slots
    目录前情提要初始化组件(1).setupComponent(2).initProps(3).initSlots额外内容总结前情提要 上文我们分析了挂载组件主要调用了三个函数: cre...
    99+
    2022-11-13
    Vue3组件挂载初始化 Vue3 初始化props slots
  • DataV全屏容器组件源码分析
    这篇文章主要介绍“DataV全屏容器组件源码分析”,在日常操作中,相信很多人在DataV全屏容器组件源码分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”DataV全屏容器组件源码分析”的疑惑有所帮助!接下来...
    99+
    2023-07-05
  • iOS架构从MVC、MVP到MVVM源码分析
    本篇内容主要讲解“iOS架构从MVC、MVP到MVVM源码分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“iOS架构从MVC、MVP到MVVM源码分析”吧!1.传统的MVC设计模式M: Mod...
    99+
    2023-07-05
  • iOS底层allocinitnew源码流程示例分析
    目录alloc&init 的源码流程图Init 源码探索new 的源码探索alloc&init 的源码流程图 首先创建Person 类, 在main函数创建Per...
    99+
    2022-12-25
    iOS 底层alloc init new分析 iOS alloc init
  • SpringCloud负载均衡组件Ribbon源码分析
    本文小编为大家详细介绍“SpringCloud负载均衡组件Ribbon源码分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“SpringCloud负载均衡组件Ribbon源码分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来...
    99+
    2023-07-02
  • Vue组件中的自定义事件源码分析
    这篇文章主要介绍“Vue组件中的自定义事件源码分析”,在日常操作中,相信很多人在Vue组件中的自定义事件源码分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue组件中的自定义事件源码分析”的疑惑有所帮助!...
    99+
    2023-06-29
  • SharedPreference初始化源码分析
    本篇内容介绍了“SharedPreference初始化源码分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!初始化sp 内部将数据放到 xm...
    99+
    2023-07-05
  • Dubbo Service Mesh基础架构组件源码分析
    这篇文章主要讲解了“Dubbo Service Mesh基础架构组件源码分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Dubbo Service ...
    99+
    2023-07-05
  • Vue组合式API源码分析
    这篇“Vue组合式API源码分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Vue组合式API源码分析”文章吧。一. 为什...
    99+
    2023-07-05
  • Android Jetpack组件Lifecycle源码解析
    目录前言源码版本简单使用源码分析原理探究初始化工作两个重要枚举类Lifecycle.EventLifecycle.StateLifecycleRegistryObserverWith...
    99+
    2023-03-13
    Android Jetpack组件Lifecycle Android Jetpack
  • Android Jetpack 组件LiveData源码解析
    目录前言基本使用疑问源码分析ObserverObserverWrapperLifecycleBoundObserverMutableLiveDatapostValuesetValue...
    99+
    2023-03-10
    Android Jetpack LiveData Android Jetpack
  • Vue3全局组件通信之provide/inject源码分析
    1、前言顾名思义,爷孙组件是比 父子组件通信 要更深层次的引用关系(也有称之为 “隔代组件”):C组件引入到B组件里,B组件引入到A组件里渲染,此时A是C的爷爷级别(可能还有更多层级关系),如果你用 props ,只能一级一级传递下去,那就...
    99+
    2023-05-14
    Vue3 provide inject
  • vue3新拟态组件库开发流程之table组件源码分析
    目录基础表格固定表头高度/流体高度自定义列宽基础表格 首先开发table组件之前,先想好要用什么样式的api,因为笔者在生产工作中用的都是element,所以前面几个组件风格和ele...
    99+
    2023-05-18
    vue3 table组件源码 vue3组件库开发
  • 源码解析ios开发SDWebImage方法
    目录引言源码解析字典操作看一下调用下载函数前的实例化过程快速查找缓存的方法回调开始进入查找函数总结一下函数调用1.先调用2.设置图片引言 在着手写第二篇的时候,发现这个SDWebim...
    99+
    2024-04-02
  • 【Mybatis源码解析】mapper实例化及执行流程源码分析
    文章目录 简介 环境搭建 源码解析 附 基础环境:JDK17、SpringBoot3.0、mysql5.7 储备知识:《【Spring6源码・AOP】AOP源码解析》、《JDBC详细...
    99+
    2023-08-20
    mybatis java spring boot
  • Vue3源码分析组件挂载创建虚拟节点
    目录前情提要1. Mount函数2. 创建虚拟节点的几个方法(1) createVNode:用于创建组件的虚拟节点(2) createElementVNode:用于创建普通tag的虚...
    99+
    2022-11-13
    Vue3组件挂载创建虚拟节点 Vue3组件挂载
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作