1.面向过程:处理事情以过程为核心,一步一步的实现。
2.面向对象:万物皆对象
3.链式编程思想:是将多个操作(多行代码)通过点号(.)链接在一起成为一句代码,使代码可读性好。a(1).b(2).c(3)
- 链式编程特点:方法的返回值是block,block必须有返回值(本身对象),block参数(需要操作的值)
- 代表:masonry框架。
4.响应式编程思想:不需要考虑调用顺序,只需要知道考虑结果,类似于蝴蝶效应,产生一个事件,会影响很多东西,这些事件像流一样的传播出去,然后影响结果,借用面向对象的一句话,万物皆是流。
- 代表:KVO运用。
5.函数式编程思想:是把操作尽量写成一系列嵌套的函数或者方法调用。
- 函数式编程本质:就是往方法中传入Block,方法中嵌套Block调用,把代码聚合起来管理
- 函数式编程特点:每个方法必须有返回值(本身对象),把函数或者Block当做参数,block参数(需要操作的值)block返回值(操作结果)
- 代表:ReactiveCocoa。
链式编程思想-模仿masonry写一个加法计算器
Calculator分类
#import <Foundation/Foundation.h>
#import "CalculatorManager.h"
@interface NSObject (Calculator)
+ (double)gw_makeCalculate:(void(^)(CalculatorManager *manager))block;
@end
#import "NSObject+Calculator.h"
@implementation NSObject (Calculator)
+ (double)gw_makeCalculate:(void (^)(CalculatorManager *))block {
CalculatorManager *manager = [[CalculatorManager alloc] init];
block(manager);
return manager.result;
}
@end
CalculatorManager类
#import <Foundation/Foundation.h>
@interface CalculatorManager : NSObject
@property (nonatomic, assign) double result;
- (CalculatorManager *(^)(double))add;
@end
#import "CalculatorManager.h"
@implementation CalculatorManager
- (CalculatorManager *(^)(double))add {
return ^(double value) {
_result += value;
return self;
};
}
// CalculatorManager *(^AddBlock)(double) = ^(double value) {
// _result += value;
// return self;
// };
@end
方法的调用
#import "ViewController.h"
#import "Masonry.h"
#import "NSObject+Calculator.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
double result = 0;
result = [NSObject gw_makeCalculate:^(CalculatorManager *manager) {
manager.add(1).add(2);
}];
NSLog(@"%f",result);
}
@end
响应式编程思想-写一个加法计算器
CalcultorMake类
#import <Foundation/Foundation.h>
@interface CalcultorMake : NSObject
@property (nonatomic, assign) int result;
- (instancetype)gw_makeCalculte:(int(^)(int value))calculteBlock;
@end
#import "CalcultorMake.h"
@implementation CalcultorMake
//函数式编程思想:方法的返回值必须是对象本身,把函数或block当做方法的参数,block的参数是需要操作的值,block的返回值是操作的结果值
- (instancetype)gw_makeCalculte:(int (^)(int))calculteBlock {
_result = calculteBlock(_result);
return self;
}
@end
方法的调用
#import "ViewController.h"
#import "Masonry.h"
#import "NSObject+Calculator.h"
#import "CalcultorMake.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
//函数式编程思想
CalcultorMake * make = [[CalcultorMake alloc] init];
[[make gw_makeCalculte:^int(int value) {
value += 5;
value -= 3;
return value;
}] result];
}
@end