iOS中Block实现的探究(一)
2015-03-13 17:40
211 查看
本文是学习jasonblog的《iOS中block实现的探究》一文的笔记,是在自己理解的基础上写的注释,不知是否有谬误之处,盼指正。
原文: http://blog.csdn.net/jasonblog/article/details/7756763?reload
下面是对于block中使用到局部变量、全局变量(或静态变量)这两种情况的理解。篇(二)中将会是对__block变量和其他方面的理解。
原文: http://blog.csdn.net/jasonblog/article/details/7756763?reload
下面是对于block中使用到局部变量、全局变量(或静态变量)这两种情况的理解。篇(二)中将会是对__block变量和其他方面的理解。
int globalInt = 0; - (void)test { int localInt = 3; void (^blk)() = ^{ globalInt += localInt; printf("globalInt + localInt = %d\n", globalInt); }; blk(); } // -------------------以下为上函数编译过程中的中间代码------------------- // // block自身类 struct __block_impl { void *isa; // block的类型,在堆上还是在栈上 &_NSConcreteStackBlock在栈上、&_NSConcreteGlobalBlock在堆上 int Flags; int Reserved; void *FuncPtr; // 指向block实现函数的指针(本例中指向函数static void __test_block_func_0(...)) }; // block--blk的类 // 类名根据所在函数(test函数)以及出现序列(第0个)进行命名。如果是全局block,就根据变量名和出现序列进行命名。 struct __test_block_impl_0 { struct __block_impl impl; struct __test_block_desc_0 *Desc; // 描述信息 int localInt; // 局部变量 int *globalInt; // 全局变量或静态变量会在这里有一个对应的指针 __test_block_impl_0(void *fp, struct __test_block_desc_0 *desc, int _localInt, int *_globalInt, int flags = 0): localInt(_localInt), globalInt(_globalInt) { impl.isa = &_NSConcreteStackBlock; impl.Flags = flags; impl.FuncPtr = fp; Desc = desc; } }; // block对应的函数体 static void __test_block_func_0(struct __test_block_impl_0 *__cself) { // block对应的函数体。__cself为block自身 int localInt = __cself -> localInt; int *globalInt = __cself -> globalInt; (*globalInt) += localInt; printf("globalInt + localInt = %d\n", (*globalInt)); } // 描述信息 static struct __test_block_desc_0 { unsigned long reserved; unsigned long Block_size; } __test_block_desc_0__DATA = {0, sizeof(struct __test_block_impl_0)}; void test() { int localInt = 3; __test_block_impl_0 impl = __test_block_impl_0((void *)__test_block_func_0, &__test_block_desc_0__DATA, localInt, &globalInt); void (*blk)(void) = (void (*)(void))&impl; ((void (*)(struct __block_impl *))((struct __block_impl *)blk) -> FuncPtr)((struct __block_impl *)blk); }
相关文章推荐
- iOS中block实现的探究
- iOS中block实现的探究
- iOS中block实现的探究
- iOS中block实现的探究
- iOS中block实现的探究
- iOS中block实现的探究
- iOS中block实现的探究
- iOS中block实现的探究
- iOS中block实现的探究
- iOS中block实现的探究 (转)
- iOS中block实现的探究
- iOS:Block 编程2--实现探究
- iOS中block实现的探究
- iOS中block实现的探究
- iOS中block实现的探究
- iOS中block实现的探究
- iOS中block实现的底层探究
- 关于iOS中block如何实现的探究
- ios 中 block 实现的探究
- iOS中block实现的探究