
ReactiveCocoa
• 知识备用库:iOS10 collectionView以前是复用的,但是iOS10以后就要设置一个属性才可以复用。
• C语言面向过程编程,OC面向对象编程
• 链式编程思想(masonry),可读性特别好,聚合度高;
• 响应式编程思想(KVO),解耦比较好;
• 函数式编程结构 + 响应式编程思想 = ReactiveCocoa 的实现;
• 所谓的店语法无非是get或者set方法,set方法一般用于赋值,get方法一般用于取值
• 关于OC中的括号传递参数的思想其本质就是block,当想用链式编程思想的时候第一个想到的就是block。下面是一个简单的例子:
```
-(void(^)())testCode
{
NSLog(@"======a");
void(^block)() = ^{
NSLog(@"======c");
};
NSLog(@"======b");
return block;
}
调用后的输出的结果为:
2018-02-05 15:54:02.660583<0800 RACtest[1138:36428] ======a
2018-02-05 15:54:02.660738>0800 RACtest[1138:36428] ======b
2018-02-05 15:54:02.660823+0800 RACtest[1138:36428] ======c
```
---
•
```
^{
//其实这里你可以把代码可以全部保存到这里
NSLog(@"保存你的代码");
}();
```
• 备注:其实上面的这种代码格式为了更好的管理代码,没别的意思
• 下面我就用这种链式编程思想实现一个简单的加法计算器,仿照Masonry,首先我在这里定义了一个 CalculateManager的类,然后在里面用block实现链式调用的这种方法
```
typedef CalculateManager *(^CalculateManagerBlock)(NSInteger value);
-(CalculateManagerBlock)add
{
return ^(NSInteger value){
_result += value;
return self;
};
}
```
• 上面的这种思想我觉得在封装SDK的时候真心是一个不错的选择,但是你知道这个函数的执行顺序吗,首先调用函数方法,然后调用block,记住这个参数不是函数本身的参数,而是block的,调用()之心里面的 ^{}里面的代码,然后在block里返回CalculateManager。
• 上面是RAC的基础下面进入正题:
• 先说下KVO,其实KVO是属于响应式编程思想的一种,KVO底层的原理是set方法有没有调用,KVO只能set方法。KVO的实现原理,(1)动态生成子类,也叫派生类(子类会继承所有的父类的方法);(2)生成子类为了重写父类的set方法,目的属性有没有改变;(3)修改对象的isa指针,isa指向那个类就去那个类中查找方法,IPM-指向实际执行函数体的函数指针,_cmd SEL 类型的一个变量,Objective C的函数的前两个隐藏参数为self 和 _cmd,ivar ivar - objective C中的实例变量。
• RAC有两个版本一个是OC的,另外一个是swift的,默认是swift版本的,如果想要OC版本的用 ReactiveObjC 搜索。
• 在这里任何事情都通过信号传递,当然新框架的学习也是非常困惑的,我们一般时候学习的时候通常在一般的常用的类入手,其次想着框架的实现和源码的阅读,对于RAC来说,在代码的实现是函数式,其思想是响应式编程。面向对象 c语言
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-77250-1.html
敌动
2222222222222222
不交钱就不给你开药单子
桌子乱成那样