iOS开发之Block(3)
来源:互联网 发布:张馨予坐台知乎 编辑:程序博客网 时间:2024/06/05 21:04
tips:-rewrite-objc 选项将源代码编译为C++源代码
首先是c语言源文件中实现block:
#include <stdio.h>int main(int argc, const char * argv[]){ void(^blk)(void) = ^{ printf("Block\n"); }; blk(); return 0;}
编译之后:
//block结构体 (__block_impl的实例)struct __main_block_impl_0 { struct __block_impl impl; struct __main_block_desc_0* Desc; //构造函数 __main_block_impl_0(void *fp, struct __main_block_desc_0 *desc, int flags=0) { impl.isa = &_NSConcreteStackBlock; impl.Flags = flags; impl.FuncPtr = fp; Desc = desc; }};//block变量 带有自动变量的匿名函数 (匿名函数被当作简单c函数)//struct __main_block_impl_0 *__csel 指向block变量的指针static void __main_block_func_0(struct __main_block_impl_0 *__cself) { printf("Block\n"); }static struct __main_block_desc_0 { size_t reserved; size_t Block_size;} __main_block_desc_0_DATA = { 0, sizeof(struct __main_block_impl_0)};int main(int argc, const char * argv[]){ //声明block //struct _main_block_impl_0 tmp = __main_block_impl_0(__main_block_func_0,&__mian_block_desc_0_DATA) //struct _main_block_impl_0 * blk = & tmp; void(*blk)(void) = (void (*)())&__main_block_impl_0((void *)__main_block_func_0, &__main_block_desc_0_DATA); //执行block ((void (*)(__block_impl *))((__block_impl *)blk)->FuncPtr)((__block_impl *)blk); return 0;}
结论:Block == oc 对象。
0 0
- iOS开发之Block(3)
- iOS开发之Block
- iOS开发之Block(1)
- iOS开发之Block(2)
- iOS开发之Block(4)
- Ios开发随笔之block(一)
- iOS开发 之闭包(Block)
- iOS开发之block(一)
- iOS开发之block(二)
- IOS开发之Block编程
- ios开发之Block语法
- IOS开发之block应用
- IOS开发之Block编程
- IOS开发之Block语法
- IOS开发之Block语法
- iOS开发之block详解
- iOS开发之BLOCK应用
- IOS开发之Block详解
- ECshop 数据库表结构(转)
- html特殊符号转换函数(转)
- 修改Linux的SSH连接时间设置
- linode centos6.2 iptab…
- MySQL查询对NULL的处理
- iOS开发之Block(3)
- 急功近利浮躁心态探源
- ngui动态生成prite
- 并发和并行的区别
- 用Darwin和live555实现的直播框架
- Hbase shell命令
- Program Files(x86)探索
- 用C++实现带单位的数值计算
- h.264编码压缩后的视频文件直接播放