Block

来源:互联网 发布:淘宝网分类 编辑:程序博客网 时间:2024/06/07 02:23

Block用法

1.从前往后传值直接用属性,从后往前传值用block2.两个不相关的页面进行传值

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
0 0
原创粉丝点击