iOS课程观看笔记(五)---Block

在这里插入图片描述

问:什么是Block?

Block是将函数及其执行上下文封装起来的对象
Block的调用,既是函数的调用

截获变量

在这里插入图片描述

__block修饰符

一般情况下,对被截获变量进行赋值操作需添加 __block修饰符

赋值 != 使用

在这里插入图片描述
上面代码可以正常执行
array是局部变量,会被捕获进去,捕获进去的是NSMutableArray *array,array是指针变量,array本身不可以做修改,但是array指针指向的变量可以修改,也就是[array addobject:@123]没有问题

在这里插入图片描述
上面代码不可以执行
array = [NSMutableArray array];要修改的是指针变量array本身存储的内容,是不可以的。

类似于捕获的局部变量int a = 10;在block里面,a = 5;是不允许的。

在这里插入图片描述在这里插入图片描述

在这里插入图片描述


- (void)viewDidLoad {
    [super viewDidLoad];
    
    __block int multiplier = 10;
    _blk = ^int(int num){
        
        return num *multiplier;
    };
    
    multiplier = 6;
    
    [self executeBlock];
}

- (void)executeBlock
{
    int result = _blk(4);
    NSLog(@"result = %d", result);
}

结果:
result = 24

需要注意的是:
multiplier = 6;不是对int型multiplier赋值,而是
multiplier.__forwaring->multiplier = 6;
__block类型的multiplier对象里面的__forwaring指针,指向堆上面的int型multiplier,然后赋值6。

题外话

multiplier.__forwaring->multiplier = 6;
而不是
multiplier->__forwaring->multiplier = 6;
因为multiplier是结构体,
结构体访问成员变量是使用.

__forwaring是结构体指针
结构体指针访问成员变量是->
代表(*结构体指针).成员变量

其余Block内容没有什么新的知识点,不表

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值