黑马程序员技术交流社区
标题: block 块 函数指针的变形 [打印本页]
作者: xiniuniu 时间: 2015-4-17 14:59
标题: block 块 函数指针的变形
blcok封闭了一段代码, 可以在任何时候执行
block可以作为函数的参数,或函数的返回值, 而其本身又可以带参数和返回值
苹果官方建议多用block, 在多线程,异步任务,集合遍历,集合排序,动画转场用得很多
那block我们应该怎样去理解它呢
在这个代码中block的作用仅仅返回数值1, 断点, 反汇编代码, 查看
block变量就是一个含有函数指针类型变量的一个结构体, 前8字节是一个isa指针. 这个结构体是不透明的,所以其它变量的用途也不太清楚, 但很明显, 结构体中, 第4个成员变量
是根据我们block变量声明所生成的一个返回值为int无参的函数指针. 这个指针中存放的数值为函数的首地址 0x100000f30
再声明并定义一个有两个参数和一个返回值的块, 断点,反汇编代码,查看
同样block结构体中第4个成员变量又变成了 (int)(*)(int, int) 函数指针类型
所以我们可以简单理解, 块就是函数指针的变形使用
那么OC中为什么要引入块的概念,而不直接使用函数指针呢, 和直接使用函数指针比起来又什么不同呢, 以目前的知识积累可以得出结论三个字: 我Y的不知道! ^^
但至少我们可以肯定, 调用 一个块时就是在调用函数.
作者: yanggangcl 时间: 2015-10-27 12:23
请问下楼主右边紫色哪些是怎么弄出来的?
作者: ccwinner 时间: 2015-10-27 17:11
block感觉就像是函数中的函数,相当于内联函数。
block可以作为函数参数使用,偶尔可以代替代理方法。另外它和函数指针的方式不同的是,它是在运行时产生,而函数指针所指向的函数在编译阶段就已经确定,
| 欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |