- Block的定义格式
返回值类型 (^block变量名)(形参列表) = ^(形参列表) {
};
- 调用Block保存的代码
block变量名(实参);
- 使用typedef定义Block类型
typedef 返回值类型 (^block类型名称)(形参列表);
- 默认情况下, Block内部不能修改外面的局部变量
- Block内部可以修改使用__block修饰的局部变量
.h
typedef void(^OperationBlock)();
@property(nonatomic,copy)OperationBlock operationBlock;//最好用copy
.m
/**
*block 最最关键是 一定先定义后 才能够调用(一定注意权限全局变量Block才能全局调用)
*
*/
/**
*头部定义
*/
typedef void(^Test)();
typedef void (^TestPar)(NSString*);
typedef NSString* (^TeturnAndPar)(NSString*,NSString*);
/**
*定义
*/
//习惯很重要 虽然 没有参数 在定义赋值右端还是写上() 因为结构上可以让你更有清楚思维
Test test=^(){
};
TestPar testparameter=^(NSString* par){
};
/**
*有返回值在定义 也要写返回值
*
*/
TeturnAndPar testAndPar=^(NSString *parter,NSString *parter2){
return parter;
};
/**
*调用
*
*/
test();
testparameter(@"努力奋斗");
testAndPar(@"奋斗",@"努力");
/**
*block的定义
*/
//无返回值 无参数
void(^testBlock)()=^{
LJKLOG(@"cao block");
};
//无返回值 有参数
void(^testParameterBlock)(NSString*,NSString*)=^(NSString *parameter1,NSString *parameter){
[parameter stringByAppendingString:parameter1];
};
//有返回值 有参数
NSString*(^testReturnAnpar)(NSString*,NSString*)=^(NSString *par1,NSString *par2){
return [par1 stringByAppendingString:par2];
};
/**
*block的调用
*/
//无返回值 无参数
testBlock();
//无返回值 有参数
testParameterBlock(@"cao",@"nimei");
//有返回值 有参数
NSString *stringpp=testReturnAnpar(@"nima",@"SB");
LJKLOG(@"%@",stringpp);