大话大前端时代(一) —— Vue 与 iOS 的组件化
组件的种类, 不同语言, 不同项目会有不同的划分,但是要明白模块与组件的区别
- 递归组件
Actions
和 Mutations
的区别在于:
Action
提交的是 mutation
,而不是直接变更状态。
Action
可以包含任意异步操作,而 Mutations
必须是同步函数。
异步回调 UI 操作的时候, 尤其是 iOS, 主线程同步操作, 所以一般会对异步回调做一个同步的处理
组件 - iOS
iOS 的组件一般都是基于Cocoapods
, 而 iOS 的组件主要分为2种形式:
- 静态库
- 动态库
静态库 一般是以 .a 和 .framework 结尾的文件,动态库一般是以 .dylib 和 .framework 结尾的文件。
这里可以看到,一个 .framework 结尾的文件仅仅通过文件类型是无法判断出它是一个静态库还是一个动态库。
静态库和动态库的区别在于:
.a文件肯定是静态库,.dylib肯定是动态库,.framework可能是静态库也可能是动态库;
-
静态库在链接其他库的情况时,它会被完整的复制到可执行文件中,如果多个App都使用了同一个静态库,那么每个App都会拷贝一份,缺点是浪费内存。类似于定义一个基本变量,使用该基本变量是是新复制了一份数据,而不是原来定义的;静态库的好处很明显,编译完成之后,库文件实际上就没有作用了。目标程序没有外部依赖,直接就可以运行。当然其缺点也很明显,就是会使用目标程序的体积增大。
-
动态库不会被复制,只有一份,程序运行时动态加载到内存中,系统只会加载一次,多个程序共用一份,节约了内存。而且使用动态库,可以不重新编译连接可执行程序的前提下,更新动态库文件达到更新应用程序的目的。
组件间的消息传递和状态管理
主要通过路由 Router 来实现 《iOS 组件化 —— 路由设计思路分析》
iOS 组件注册的方式主要有3种:
load方法注册
读取 plist 文件注册
Annotation注解方式注册 (特定的宏定义,将数据存储在数据段的指定区域)
网友评论