为了账号安全,请及时绑定邮箱和手机立即绑定

iOS 脉络图总结汇总 连续更新

标签:
iOS

图片描述

语言: objective-c/swift

1.动态性:

1、动态类型<弱类型>(id):在代码的运行阶段判断代码的类型,使用id类型可以让应用在“运行时”使用任何类型来替换。动态类型让程序更加灵活,但是会使数据的统一性降低和代码的可读性。我们常用静态类型<强类型>(如NSString),使用静态类型编译器可以完全分析你的代码,这让代码的性能和可预知性更高。
2、动态绑定:让代码在运行时判断需要调用什么方法,而不是在编译时。动态类型和动态绑定使得选择哪个接收者已经调用什么方法都放到运行时去完成.
3、动态载入:应用程序可以根据需要加载可执行代码以及资源,而不是在启动时就加载所有资源。
4、SEL类型iOS在编译的时候会根据方法的名字(包括参数序列),生成一个用来区分这个方法的唯一的ID,这个ID是SEL类型的,SEL的本质就是类方法的编号[函数地址]。(类似C语言里面的函数指针,但是OC的类不能直接使用函数指针,这样只能做一个@selector语法来取。注意:@selector是查找当前类(含子类)的方法。)

2.框架

2.1 MVC、MVCS、MVVM、MVP
MVC :Model 、View、 Controller

Controller 响应用户交互 去请求新数据 更新Model 更新Model后再刷新View,
View上的交互会响应在Controller上
特点:大部分的请求逻辑,数据处理逻辑会放在Controller里; Model只是接受数据、简单的数据处理,不进行数据的批量处理;View接受用户交互行为、传递交互,刷新数据

MVVM:View、ViewModel、Model

别名View、Model绑定(model-view-binder 模式)优点有限,使的Model和View解耦,但是MVVM的上手难度并不低,我感觉主要是RAC(并不是MVVM模式必有的),导致了此模式的上手和维护难度就提升了,有利有弊,此模式提出已经好久还没有大范围得到应用,也侧面说明了此模式的弊端
虽然MVVM很难上手和维护,但是RAC并不是必须的,这样就演化出MVVM的简化版本,借鉴其优点,基于MVC,再生成ViewModel(非双向绑定的类)来剥离Controller里复杂的处理逻辑、请求逻辑等,实现解耦、复用等优化,举个例子:每个控制器对应的都有网络请求,然后返回数据,先处理有用数据,再去刷新View,这个过程再怎么简单也不会小,就可以创建个ViewModel类,专门负责请求数据、生成Model,暴露刷新接口,和要请求的接口,这也算MVVM,也是很多公司在想降低实现和维护难度的目的下产生的。
我在最近的Swift项目中使用了大神的Tempure框架,单向数据流,C-State V-ViewModel Action APPSate C触发Action更改APPState,也就触发了ViewModel的变化 ViewModel和View绑定,也会刷新View,模仿了RN的数据刷新流程,但是模仿的并不完全,ViewModel的变化触发的View刷新,只是会触发View的方法func update(oldModel: HomeViewModel?),里面具体的刷新还是要调用 例如reloadData等,这个只是介绍一下Swift的类似模式,总结来说没有那个好,因为并不能严格意义上实现单向数据流,所以也没达到严格意义上的解耦,所以这个模式既然不能完全解决问题,那也没有推荐使用的意义

MVCS:Model、View、Controller、Services

这个模式也是苹果官方正在使用的设计模式,提供Service为数据处理提供服务,这个主要是分担的Model方的任务,不在详述。

MVP:Model、View、Presenter 角色有:Model、Controller(控制器里的View,称作CView)、View、Presenter、Protocal、NetServices,其中Model仅仅是接收数据,Protocal提供可选择实现的方法声明;NetServices提供网络层的逻辑,返回数据;Presenter用来分担Controller的相关逻辑,会在Controller里初始化的时候赋值Controller的View给Presenter的属性attachView(weak修饰,避免循环引用,面向协议编程中遵守协议的类),这里就体现了面向协议编程的优势来了,协议只声明方法,具体做什么怎么做让遵守协议的类(Controller的View)自己决定,而调用这些方法的逻辑却在Presenter里,这就分担了Controller的负担。举例说明,控制器里除了生命周期,有网络请求数据方法,请求的数据返回后刷新View,期间还有Loading展示,结束有有数据、无数据两种情况,协议声明显示Loading、隐藏Loading、请求返回、无数据占位方法;在Controller里选择实现协议里的方法,然后在Presenter里合适的逻辑调用实现的方法
主要是拆分Controller里的逻辑代码

总结:万变不离其宗,都是从MVC模式演化来的,这个演化都是有目的有针对的,看看分出来的新角色负担什么新任务,例如MVVM = MVC + ViewModel;MVCS = MVC + Service;MVP = MVC + Presenter

**
**
待续,如有误,请留言指正!!!感激不尽

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
移动开发工程师
手记
粉丝
32
获赞与收藏
322

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消