iOS开发:对Block使用的一次研究总结

news/2024/7/20 5:24:35 标签: ios

在开发中Block是经常使用的,那我们就得知其然,知其所以然。

Block是什么?

Block可以封装一个匿名函数为对象,并捕获上下文所需的数据,并传给目标对象在适当的时候回调。我们使用Block的目的其实就是回调传值,那我们去看看Block的底层,再深入了解一下Block

Block的底层

Block的底层实现是结构体,和类的底层实现类似,都有isa指针,可以把Block当成是一个对象。

Block_layoutblock结构体的底层结构,其源码如下:

// Block 结构体
struct Block_layout {
   
    //指向表明block类型的类
    void *isa;//8字节
    //用来作标识符的,类似于is

http://www.niftyadmin.cn/n/68043.html

相关文章

Linux多进程开发

一、进程概述 1、程序和进程 程序是包含一系列信息的文件,这些信息描述了如何在运行时创建一个进程: 二进制格式标识:每个程序文件都包含用于描述可执行文件格式的元信息。内核利用此信息来解释文件中的其他信息。(ELF可执行连…

2023面试题

目录 http部分 2、tcp 三次握手,一句话概括 3、tcp四次挥手 4、什么是跨域,跨越的解决办法 5、TCP 和 UDP 的区别 6、websocket 7、HTTP 请求的方式,HEAD 方式 8、几个很实用的 BOM 属性对象方法(什么是 Bom? Bom 是浏览器对象&a…

nil Foundation的Placeholder证明系统(2)

前序博客: nil Foundation的Placeholder证明系统(1) nil; Foundation团队2022年11月论文《Placeholder证明系统》。[2022年11月29日版本] 8. 优化 8.1 Batched FRI 不同于单独检查每个commitment,可对其进行FRI聚合。如对多项…

Pandas数据分析实战(一):实现指数平滑法时序数据预测分析

目录 前言 一、时序序列数据与原始特征序列数据 时间序列 二、ewm函数 参数说明

C++之std::string的resize与reverse

std::string的resize与reverse前言1.resize2.reserve前言 在C中我们经常用std::string 来保存字符串,其中有两个比较常用但是却平时容易被搞混的两个函数,分别是resize和reserve,模糊意识里,这两个方法都是对std::string的容量或元…

Lucene学习笔记

lucene结构 索引:概念上的一个表,现实体现就是一个文件目录,一个目录代表一个索引,也视作documents文档集合 文档:document,为索引中的一条数据,一个document可以拥有多个filed(域&a…

如何在现实场景中随心放置AR虚拟对象?

随着AR的发展和电子设备的普及,人们在生活中使用AR技术的门槛降低,比如对于不方便测量的物体使用AR测量,方便又准确;遇到陌生的路段使用AR导航,清楚又便捷;网购时拿不准的物品使用AR购物,体验更…

【源码解析】数组转成set的底层实现

要将Java数组转换为Set集合,可以使用Java集合框架中的HashSet或TreeSet。HashSet是基于哈希表的实现,不保证元素的顺序,而TreeSet是基于红黑树的实现,可以将元素按照一定顺序进行排序。 下面是将Java数组转换为HashSet集合的代码示…