iOS学习之旅 ------ block

1.定义
block是对函数上下文及其执行的封装。

2.实现结构体
block 结构体:
struct __block_impl_0 {
struct __block_impl impl;
struct __main_block_desc_0 *Desc;
int age;
}
impl结构体
struct __block_impl {
void *isa; // isa指针
void Flags; // 按位表示block的一些附加信息
int Reserved; // 保留变量
void *FuncPtr; // 函数指针,指向block要执行的函数
}


image.png

3.类型
共有三种类型的block,分别是全局block(_NSConcreteGlobalBlock),堆block(_NSConcreteMallocBlock),栈block(_NSConcreteStackBlock),存储位置位于.data,堆区和栈区。

copy操作:
GlobalBlock --------copy----------> 没有变化
StackBlock --------copy-----------> MallocBlock
MallocBlock --------copy-----------> 引用计数加一

4.循环引用
自循环引用
相互循环引用
多循环引用

解除:
_ _waek _ _block

链接: https://www.jianshu.com/p/9ff40ea1cee5

推荐阅读更多精彩内容

  • 一.Block的本质 block本质是一个OC对象,它里面有个isa指针,封装了函数调用环境的OC对象,封...
    枫紫_6174阅读 497评论 0 2
  • 第一部分:Block本质 Q:什么是Block,Block的本质是什么? block本质上也是一个OC对象,它内部...
    sheldon_龙阅读 517评论 0 0
  • iOS-Block本质 参考篇:iOS-Block浅谈[https://www.jianshu.com/p/25a...
    super_2e20阅读 146评论 0 1
  • 参考篇:iOS-Block浅谈 前言:本文简述Block本质,如有错误请留言指正。 第一部分:Block本质 Q:...
    梦蕊dream阅读 59,792评论 41 318
  • 原文发布在个人博客 clang工具 block分类 block 结构 block调用 block类型以及ARC对b...
    黄河hg阅读 169评论 0 0