Block用法
1.从前往后传值直接用属性,从后往前传值用block
2.两个不相关的页面进行传值
Block变量(不用typedef)
Block变量的定义: 返回值 (^变量名)(函数参数..)
返回值 (^变量名)(函数参数..)
Block变量函数的创建
//(1)
int (^ myBlocks)(int);
myBlocks = ^(int a){
int result = a * a;
return result;
};
//(2)
int (^ myBlocks)(int) = ^(int a){
int result = a * a;
return result;
};
Block类型(typedef)
Block类型的定义
typedef <#returnType#>(^<#name#>)(arguments);
//定义Block函数类型,如下MyBlock是类型名,不是变量
typedef int (^MyBlock)(int);
在方法中定义Block类型的参数
//(1)直接创建
- (void)objectMethod:(int (^)(int))block {
//直接运用block
block(参数)
... ...
}
//(2)通过typedef创建
typedef int (^MyBlock)(int);
- (void)objectMethod:(MyBlock)block {
//可通过全局的block进行copy,然后传值
_block = [block copy];
}
- (void)otherMethod {
_block(参数)
}
Block类型函数的实现
//(1)在方法中实现
[self objectMethod:^(int a, int b) {
return a+b;
}];
//(2)在block属性点语法赋值中实现
class.block = ^(int a, int b) {
... ...
}]:
Block函数的调用
if (myBlocks) {
//先判断block是否存在再传值
myBlocks(10);
}
Block传递参数的运用
Class1.h
Typedef (^Block) (参数);
@interface Class1 : 父类
{
Block _myBlock;
}
- (返回类型)method1:(Block)block;
@end
Class1.m
@implementation Class1
- (返回类型)class1Method1:(Block)block {
//block参数用copy保存
_myBlock = [block copy];
}
- (返回类型)class1Method2:(参数类型)参数 {
//传递参数
_myBlock(参数);
}
@end
Class2.h
@interface Class1 : 父类
#import "Class1.h"
@end
Class2.m
@implementation Class2
-(返回类型)class2Method{
Class1 *class1 = [Class1 alloc] init];
[class2 class1Method:(参数类型 参数)^{
... ...
}];
}
@end