实战开发之编程思想
实际开发中我们会使用很多的三方框架,这极大的提高了我们的开发效率。但是我们的代码就会与三方产生很强的依赖(耦合性很高!!)我们会使用三方框架会做一些代码的隔离来解耦合。我们不能太依赖于某个框架,否则这个框架不更新了,导致项目后期没办法维护,比如之前Facebook提供的Three20框架
,在当时也是神器,但是后来不更新了,也就没什么人用了。因此我感觉学习一个框架,非常有必要了解它的编程思想
。牛逼的框架都是这个领域的大神编写的,查看源码学习编程思想是我们提升个人技术很好的途径。
#pragma mark - 面向过程
处理事情以过程为核心,一步一步的实现。
开发语言:C语言
#pragma mark - 面向对象
万物皆对象
开发语言:Object-C Swift JAVA Android 。。。。。。
#pragma mark - 链式编程思想
是将多个操作(多行代码)通过点号(.)链接在一起成为一句代码,使代码可读性好。a(1).b(2).c(3)
链式编程思想特点:
方法的返回值是block,block必须有返回值(本身对象,就是方法的调用者),block参数(需要操作的值)
代表:masonry框架
框架中: mas_makeConstraints执行流程:
1.创建约束制造者MASConstraintMaker,绑定控件,生成了一个保存所有约束的数组
2.执行mas_makeConstraints传入进行的block
3.让约束制造者安装约束
* 1.清空之前的所有约束
* 2.遍历约束数组,一个一个安装
例子:
// 创建红色view
UIView *redView = [[UIView alloc] init];
redView.backgroundColor = [UIColor redColor];
[self.view addSubview:redView]; // 设置约束前,一定要先把view添加上去
[redView mas_makeConstraints:^(MASConstraintMaker *make) {
// 链式编程思想特点:方法返回值必须要方法调用者
// block:把需要操作的值当做block参数,block也需要返回值,就是方法调用者
// 设置约束
// 给make添加left,top约束,调用equalTo给这两个约束赋值
make.left.top.equalTo(@10);
make.right.bottom.equalTo(@-10);
}];
仿照masonry 写一个计算类框架
为了使用方便给NSObject写一个分类,这样每个类都可以调用
NSObject+Calculate.h 声明
#import <Foundation/Foundation.h> #import "CalculateManager.h" @interface NSObject (Calculate) // 把所有的计算代码放在这里 + (int)ey_makeCalculate:(void(^)(CalculateManager *))block; @end
NSObject+Calculate.m 实现
#import "NSObject+Calculate.h" @implementation NSObject (Calculate) + (int)ey_makeCalculate:(void (^)(CalculateManager *))block { // 创建计算管理者 CalculateManager *mgr = [[CalculateManager alloc] init]; // 执行计算 block(mgr); return mgr.result; } @end
CalculateManager.h 声明 真正实现计算的类
#import <Foundation/Foundation.h> @interface CalculateManager : NSObject @property (nonatomic, assign) int result; - (CalculateManager *(^)(int))add; @end
CalculateManager.m 实现
#import "CalculateManager.h" @implementation CalculateManager - (CalculateManager * (^)(int))add { return ^(int value){ _result += value; return self; }; } @end
ViewController.m 中使用
int reslut = [NSObject ey_makeCalculate:^(CalculateManager *mgr) { mgr.add(5).add(6).add(7); // 用block替代方法 // 把怎么计算的代码封装到block }]; NSLog(@"计算的结果为:%d",reslut);
#pragma mark - 响应式编程思想
响应式编程思想特点:不需要考虑调用顺序,只需要知道考虑结果,类似于蝴蝶效应,产生一个事件,会影响很多东西,这些事件像流一样的传播出去,然后影响结果,借用面向对象的一句话,万物皆是流。
代表:KVO应用
第十九:KVO底层实现原理
#pragma mark - 函数式编程思想
是把操作尽量写成一系列嵌套的函数或者方法调用。
函数式编程思想本质:往方法中传入Block,方法中嵌套Block调用,把代码聚合起来管理
函数编程思想特点:每个方法必须有返回值(本身对象),把函数或者Block当做参数,
block参数(需要操作的值)
block返回值(操作结果)
代表:ReactiveCocoa,现在分为ReactiveObjC 和 ReactiveSwift
ReactiveCocoa结合了以下几种编程风格:
函数式编程:Functional Programming
响应式编程:Reactive Programming
所以,你可能听说过ReactiveCocoa被描述为函数响应式编程(FRP)框架。
以后使用RAC解决问题,就不需要考虑调用顺序,直接考虑结果,把每一次操作都写成一系列嵌套的方法中,使代码高聚合,方便管理。
更多内容--> 博客导航 每周一篇哟!!!
有任何关于iOS开发的问题!欢迎下方留言!!!或者邮件lieryangios@126.com 虽然我不一定能够解答出来,但是我会请教iOS开发高手!!!解答您的问题!!!