iOS组件化

一. 组件化能够解决什么问题

  1. 解耦,方便快速迭代。
  2. 提高编译速度,提高开发效率。
  3. 方便针对性测试

二. 常见方案及优缺点(路由)

1. url-block

概述:通过维护一个url-block的映射实现已知url就可以调用注册的block

优点:

  1. 使用简单。

缺点:

  1. 影响启动时间。
  2. 硬编码,需要专门的文档或者系统来管理URL,方便调用者使用。
  3. URL散乱,且维护成本很高(使用宏定义会好一些)。
  4. 无法传递非常规类型参数,如UIImage
  5. 映射的内存占用
2. protocol-class

概述:维护一个protocol-class映射,各个组件暴露protocol,主工程通过protocol获取对应的实例,实现交互。
优点:

  1. 相比url-block方案,可以传递非常规类型参数。
  2. 没有硬编码

缺点:

  1. 主工程依赖protocol,且组件也依赖protocol
  2. 影响启动速度。
  3. 映射的内存占用
3. target-action

概述:中间件使用硬编码和runtime调用各个组件。
优点:

  1. 解耦相对上面两种方案更好一些。
  2. 不需要注册,启动速度和维护成本会少一些。

缺点:

  1. 需要单独维护一个分类repo,且主工程依赖这个repo。
  2. 依然有硬编码存在分类中,但相对url-block来说可维护性好很多。

三. cocoapods+私有库实现

git平台创建代码仓库zyspec作为远程私有仓库,并添加到本地。

# 本地pod库目录
cd /Users/daniel/.cocoapods/repos
# 配置git账户信息
sudo git config --system --unset credential.helper
# 添加本地私有仓库
pod repo add zyspec https://e.coding.net/Yanyinghenmei/componentization/zyspec.git

创建私有库,编辑.spec文件,打tag并验证。

# 创建私有库
pod lib create Route
# 关联远程仓库
git remote rm origin
git remote add origin https://e.coding.net/Yanyinghenmei/componentization/ZYRoute.git
git push -u origin master
# 打tag
git tag '0.0.1'
git push --tag
# 查看tag
git tag -l
# 删除本地tag
git tag -d '0.0.1'
# 删除远程tag
git push origin --delete '0.0.1'
# 推送tag到远程仓库
git push --tag
# 推送多个tag到远程仓库
git push --tags
# 验证spec文件
pod lib lint [--private] [--sources='https://e.coding.net/Yanyinghenmei/componentization/zyspec.git'] [--use-libraries]
pod spec lint [--private] [--sources='https://e.coding.net/Yanyinghenmei/componentization/zyspec.git'] [--use-libraries]
>注意,此处的命令仅仅作为笔记,并非严格按照此顺序。

将验证过的.spec文件放在zyspec文件夹下,git push之后执行如下命令

# 更新私有仓库
pod repo push zyspec Route.podspec [--use-libraries]

四. demo

https://yanyinghenmei.coding.net/p/componentization/repos

参考链接:
蘑菇街 App 的组件化之路
iOS应用架构谈 组件化方案
大话大前端时代(一) —— Vue 与 iOS 的组件化
iOS 组件化 —— 路由设计思路分析
BeeHive —— 一个优雅但还在完善中的解耦框架

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容