大佬教程收集整理的这篇文章主要介绍了objective-c – 块如何捕获其封闭范围之外的变量?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
当编译器遇到一个Block,就像:
^{ if( numballoons > numClowns) abort(); }
它创建了一个文字结构,其中包括 – 其中包括两个重要的元素.有一个指向Block中的可执行代码的函数指针,以及Block中引用的每个变量的const字段.这样的东西
struct __block_literal_1 { /* other fields */ void (*invokE)(struct __block_literal_1 *); /* ... */ const int numBalloons; const int numClowns; };
请注意,invoke函数将指向在此定义的类型的结构体的指针;也就是说,Block在执行代码时自动执行.因此,代码可以访问结构的成员.
在声明之后,编译器创建一个Block的定义,它只是使用引用的变量来初始化struct中的正确字段:
struct __block_literal_1 __block_literal_1 = { /* Other fields */ __block_invoke_2,/* This function was also created by the compiler. */ /* ... */ numballoons,/* these two are the exact same variables as */ numClowns /* those referred to in the Block literal that you wrote. * };
然后,在invoke函数内部,引用捕获的变量就像struct的其他成员,即__block-> numballoons一样.
对象类型变量的情况有点复杂,但同样的原则也适用.
以上是大佬教程为你收集整理的objective-c – 块如何捕获其封闭范围之外的变量?全部内容,希望文章能够帮你解决objective-c – 块如何捕获其封闭范围之外的变量?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。