最近有時間看了下Masonry的實現原理,大家都知道Masonry就是經典的鏈式編程思想
void(^block)(MASConstraintMaker *maker) = ^(MASConstraintMaker *make) {
// 描述控件的所有約束
make.left.top.equalTo(@10);
make.right.bottom.equalTo(@(-10));
};
// 參數:block
[redView mas_makeConstraints:block];
mas_makeConstraints作用:給控件設置布局,把控件的所有約束保存到約束制造者中 ---- (NSArray *)mas_makeConstraints:(void(^)(MASConstraintMaker *))block
1.創建一個約束制造者
2.調用block(maker),把所有的控件的約束全部保存到約束制造者
3.[constraintMaker install]:遍歷約束制造者的所有約束給控件添加約束
鏈式編程小練習
1.創建XMCaculatorMaker文件,計算器maker類
2.定義計算結果屬性
3.定義加法運算方法
#import <Foundation/Foundation.h>
@interface XMCaculatorMaker : NSObject
@property (nonatomic, assign)int result;
-(XMCaculatorMaker *(^)(int num))add;
@end
#import "XMCaculatorMaker.h"
@implementation XMCaculatorMaker
-(XMCaculatorMaker *(^)(int num))add
{
return ^(int num){
_result = _result + num;
return self;
};
}
創建NSObject分類,所有它的子類都可調用
#import <Foundation/Foundation.h>
#import "XMCaculatorMaker.h"
@interface NSObject (XMCaculaterMaker)
以后計算都使用這個方法,一調用這個方法就返回結果
-(int)makeCaculater:(void(^)(XMCaculatorMaker *maker))block;
@end
#import "NSObject+XMCaculaterMaker.h"
@implementation NSObject (XMCaculaterMaker)
-(int)makeCaculater:(void (^)(XMCaculatorMaker *maker))block
{
創建制造者
XMCaculatorMaker *maker = [[XMCaculatorMaker alloc] init];
NSLog(@"%@",maker);
block(maker);
return maker.result;
}
調用,進行計算
NSObject *object = [[NSObject alloc]init];
block:使代碼高聚合
[object makeCaculater:^(XMCaculatorMaker *maker) {
把所有的計算代碼封裝到這里
NSLog(@"-----%@",maker);
maker.add(10).add(20);
}];
總結
之前開發中比較習慣,把事情封裝到一個方法中
鏈式編程思想:把要做的事情封裝到block,給外界提供一個返回這個Block的方法
鏈式編程思想方法特點:
1.方法返回值必須是block
2.block參數:放需要操作的內容
3.block返回值:方法調用者