鏈式編程思想:下一級的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對象