block实现原理

1.没有参数的block实现原理

1.1定义block变量

1.2_main_block_impl_0结构体实现。

1.2.1函数实现(_main_block_func_0)赋值给 impl.FuncPtr.

1.2.2block所占字节(__main_block_desc_0)赋值给DESC.

1.3block函数实现__main_block_func_0.

1.4 __block_impl结构体实现。

2.block调用 block->FuncPtr(block)

2.有参数的block实现原理

struct __test_block_impl_0 {
  struct __block_impl impl;
  struct __test_block_desc_0* Desc;
  int age;(局部变量)
  int *height;(静态局部变量)(全局变量不捕获到block中)
  __test_block_impl_0(void *fp, struct __test_block_desc_0 *desc, int _age, int *_height, int flags=0) : age(_age), height(_height) {
    impl.isa = &_NSConcreteStackBlock;
    impl.Flags = flags;
    impl.FuncPtr = fp;
    Desc = desc;
  }
};


复制代码

self 在block中也是局部变量,发送消息时默认是传self,和sel(cmd)。

3.Block类型

每一种类型的block调用copy后的结果如下所示

转载于:https://juejin.im/post/5c7f6c9ff265da2dbf5f2e59

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值