链式编程思想:下一级的block给上一级使用编程
思想:把须要作的事情封装到block,给外接提供一个block方法框架
特色:方法返回值须要是block。block参数:放须要操做的内容,block返回值:方法调用者。都是点语法。函数式编程
表明:masonry框架函数
http://my.oschina.net/u/2346786/blog/619655atom
massory: [view mas_makeConstraints:^(MASConstraintMaker *make){ make.left.top.equalTo(@10); make.right.bottom.equalTo(@(-10)); } ==================== void(^block)(MASConstraintMaker *make) = ^(MASConstraintMaker *make){ make.left.top.equalTo(@10); make.right.bottom.equalTo(@(-10)); }; [view mas_makeConstraints:block];
// // // // 计算器Demo: #import <Foundation/Foundation.h> @interface CaculatorMaker : NSObject @property (assign, nonatomic) int reslut; - (CaculatorMaker *(^)(int num))add; - (CaculatorMaker *(^)(int num))multy; @end #import "CaculatorMaker.h" @implementation CaculatorMaker - (CaculatorMaker *(^)(int num))add { return ^(int num){ _reslut += num; return self; }; } - (CaculatorMaker *(^)(int num))multy { return ^(int num){ _reslut *= num; return self; }; } @end #import <Foundation/Foundation.h> #import "CaculatorMaker.h" @interface NSObject (Caculator) //计算机都使用这个方法,一调用这个方法就返回结果 + (int)makeCaculator:(void(^)(CaculatorMaker *))block; @end #import "NSObject+Caculator.h" @implementation NSObject (Caculator) + (int)makeCaculator:(void(^)(CaculatorMaker *))block { //建立计算对象 CaculatorMaker *maker = [[CaculatorMaker alloc] init]; //计算 block(maker); return maker.reslut; } @end - (void)viewDidLoad { [super viewDidLoad]; int result = [NSObject makeCaculator:^(CaculatorMaker *maker) { //把全部的计算代码封装到这里 maker.add(10).add(20).multy(3); }]; NSLog(@"%d",result); }
原理:不须要考虑调用顺序,只须要考虑结果,相似于蝴蝶效应,产生一个事件,会影响不少东西,这些事件像刘易阳的传播出去,而后影响结果。
spa
表明:KVO的应用.net
http://my.oschina.net/u/2346786/admin/edit-blog?blog=538194code
特色:每一个方法必须有返回值(对象自己)。把函数或者Block当作参数.block参数(须要操做的值)block返回值(操做结果)orm
表明:ReactiveCocoa对象