Block

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值