块运行时看起来很紧.块描述符和
函数是静态分配的,所以可以放大你的程序的工作集,但是你只能在存储中为你从包围范围引用的变量“支付”.非全局块
文字和__block变量构建在堆栈中,无任何分支,因此您不太可能遇到这么多的减速.
调用块只是result =(* b-> __ FuncPtr)(b,arg1,arg2);这与result =(* callback_func_ptr)(callback_ctx,arg2)相当.
如果您将块视为“编写自己的上下文结构的回调,并为您处理丑陋的包装,内存管理,转换和取消引用”,我认为您将意识到,在运行时,块是一个很小的成本,编程时间.