美文网首页
iOS组件化开发

iOS组件化开发

作者: MM面包 | 来源:发表于2018-03-27 15:07 被阅读26次

    一、iOS 组件化以后能带来如下的好处:

    ·加快编译速度(不用编译主客那一大坨代码了,各个组件都是静态库)

    ·自由选择开发姿势(MVC / MVVM / FRP)

    ·方便 QA 有针对性地测试

    ·提高业务开发效率

    二、如何封装成组件

    用 Cocoapods 打包一个静态库 .a 或者 framework ,网上教程很多,这里给一个链接

    三、 如何划分组件

    原则就是:要在App之间共享的代码就应该抽成 Pod 库,把它们作为一个个组件。不在 App 间共享的业务线,也应该抽成 Pod,解除它与工程其他的文件耦合性。

    常见的划分方法都是从底层开始动手,网络库,路由,MVVM框架,数据库存储,加密解密,工具类,地图,基础SDK,APM,风控,埋点……从下往上,到了上层就是各个业务方的组件了,最常见的就类似于购物车,我的钱包,登录,注册等。

    四、组件化原理

    iOS 的组件化原理是基于 Cocoapods 的。关于 Cocoapods 的具体工作原理,可以看这篇文章《CocoaPods 都做了什么?》

    五、组件分类

    iOS 的组件主要分为2种形式:静态库、动态库

    静态库和动态库的区别在于:.a文件肯定是静态库,.dylib肯定是动态库,.framework可能是静态库也可能是动态库;

    ·静态库:在链接其他库的情况时,它会被完整的复制到可执行文件中,如果多个App都使用了同一个静态库,那么每个App都会拷贝一份,缺点是浪费内存。类似于定义一个基本变量,使用该基本变量是是新复制了一份数据,而不是原来定义的;静态库的好处很明显,编译完成之后,库文件实际上就没有作用了。目标程序没有外部依赖,直接就可以运行。当然其缺点也很明显,就是会使用目标程序的体积增大。

    ·动态库:不会被复制,只有一份,程序运行时动态加载到内存中,系统只会加载一次,多个程序共用一份,节约了内存。而且使用动态库,可以不重新编译连接可执行程序的前提下,更新动态库文件达到更新应用程序的目的。

    六、 组件注册方式

    iOS 组件注册的方式主要有3种:

    ·load方法注册    ·读取 plist 文件注册    ·Annotation注解方式注册

    第一种方式在 load 方法里面利用 Runtime 把组件名和组件实例的映射关系保存到一个全局的字典里,方便程序启动以后可以随时调用。

    第二种方式是把组件名和组件实例的映射关系预先写在 plist 文件中。程序需要的时候直接去读取这个 plist 文件。plist 文件可以从服务器读取过来,这样 App 还能有一定的动态性。

    第三种方式比较黑科技。利用的是 Mach-o 的数据结构,在程序编程链接成可执行文件的时候,就把相关注册信息直接写入到最终的可执行文件的 Data 数据段内。程序执行以后,直接去那个段内去读取想要的数据即可。

    摘自:http://www.cocoachina.com/ios/20170710/19796.html

    相关文章

      网友评论

          本文标题:iOS组件化开发

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