怎样使用Block

怎样使用Block

Block的声明

// 声明的标准语法结构
return_type (^block_name)(parameters);
// 示例: void(^myBlock)(NSString *, NSNumber *);

Block的定义

标准的定义结构: ^返回值类型(参数列表){函数体}, 不过, 通场情况下返回值类型是被省略的, 因为编译器可以从存储代码块的变量中确定返回值的类型

// 有参数传递
^(NSString *aString, NSNumber *aNumber){
// impl content
}
// 无参数传递
^{
// impl content
}

将定义赋值给生命的Block变量

// ①声明的同时进行定义
void(^myBlock)(NSString *, NSNumber *) = ^(NSString *aString, NSNumber *aNumber){
// impl content
};

// ②先声明再定义
void(^myBlock)(NSString *, NSNumber *);
myBlock = ^(NSString *aString, NSNumber *aNumber){
// impl content
};

Block的调用

// block的调用和函数调用没有任何区别, 没有实参列表的时候`()`同样不可以省略
myBlock(@"HouShiqi", @18);

Block作为Objective-C函数的参数

// 1.定义一个形参为Block的OC函数
- (void)useBlockForOC:(int(^)(int, int))aBlock
{
    NSLog(@"result = %d", aBlock(300,200));
}

// 2.声明并赋值定义一个Block变量
int(^addBlock)(int, int) = ^(int x, int y){
    return x+y;
};

// 3.以Block作为函数参数,把Block像对象一样传递
[self useBlockForOC:addBlock];

// 将123合一,以内联定义的Block作为函数参数
[self useBlockForOC:^(int x, int y){
    return x+y;
}];

在实际开发中常用于回调(Callback), (和函数指针很像, 并不是巧合🤣)

为常用的Block创建typedef

与其他类型的变量不同, 在定义块变量时, 要把变量名放在类型之中, 而不要放在右侧. 这种语法非常难记, 也非常难读. 鉴于此, 我们应该为常用的块类型起个别名, 尤其是打算把代码发布成API供他人使用时. ------- From《Effective Objective-C 2.0》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

依旧风轻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值