blcok封闭了一段代码, 可以在任何时候执行 block可以作为函数的参数,或函数的返回值, 而其本身又可以带参数和返回值 苹果官方建议多用block, 在多线程,异步任务,集合遍历,集合排序,动画转场用得很多 那block我们应该怎样去理解它呢
在这个代码中block的作用仅仅返回数值1, 断点, 反汇编代码, 查看 block变量就是一个含有函数指针类型变量的一个结构体, 前8字节是一个isa指针. 这个结构体是不透明的,所以其它变量的用途也不太清楚, 但很明显, 结构体中, 第4个成员变量 是根据我们block变量声明所生成的一个返回值为int无参的函数指针. 这个指针中存放的数值为函数的首地址 0x100000f30
再声明并定义一个有两个参数和一个返回值的块, 断点,反汇编代码,查看
同样block结构体中第4个成员变量又变成了 (int)(*)(int, int) 函数指针类型 所以我们可以简单理解, 块就是函数指针的变形使用 那么OC中为什么要引入块的概念,而不直接使用函数指针呢, 和直接使用函数指针比起来又什么不同呢, 以目前的知识积累可以得出结论三个字: 我Y的不知道! ^^ 但至少我们可以肯定, 调用 一个块时就是在调用函数.
|