实战开发之编程思想

实际开发中我们会使用很多的三方框架,这极大的提高了我们的开发效率。但是我们的代码就会与三方产生很强的依赖(耦合性很高!!)我们会使用三方框架会做一些代码的隔离来解耦合。我们不能太依赖于某个框架,否则这个框架不更新了,导致项目后期没办法维护,比如之前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开发高手!!!解答您的问题!!!

posted on 2017-06-11 16:44  人生为代码而活  阅读(525)  评论(0编辑  收藏  举报

导航