当我们在下级定义代码块block以及设置代码块属性的时候,
#import <Foundation/Foundation.h>
//定义一个block
typedef void (^ColorBlock)(UIColor *);
/**
* block的使用方法
*/
@interface MyBlock : NSObject{
//把block当成一个属性
ColorBlock _changeColorBlock;
}
@property (nonatomic,copy)ColorBlock _changeColorBlock;
/**
* 根据传进来的block 把参数带过去 也可以定义一个属性block 把传过来的block赋值给属性block在完成处理后把block的参数传回去
*/
在下级实现文件里实现该方法/**
* 根据传过来的block 把参数带过去
*/
-(void)changeColorWithBlock:(ColorBlock )color{
//让属性的block为这个参数
//_changeColorBlock=color;
//copy 一个 计数器加1 以免被释放
_changeColorBlock=Block_copy(color);
UIColor *mColor=[UIColor redColor];
//color(mColor);
_changeColorBlock(mColor);
[NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(testtt) userInfo:nil repeats:NO];
//暂停5秒
// [NSThread sleepForTimeInterval:5.0];
// [self testtt];
}
-(void)testtt{
_changeColorBlock([UIColor blackColor]);
}
我们在上级调用这个block,当下级代码执行到代码块的时候会触发我们上级用到的代码块,下级代码块的参数我们在上级代码块里可以获取,就是上级代码块的参数。
//调用block类里的方法 传个block过去 把参数带过来
[block changeColorWithBlock:^(UIColor *color){
//设置viewcontroller的背景色 用block带回来的参数
self.view.backgroundColor=color;
}];