Block原理,为什么block能捕获变量,为什么需要加__block
原文 : http://www.jianshu.com/p/ee9756f3d5f6
本来在 obj-c 高级编程中看过,但是时间长了只记得朦胧,回去看书的有100多页太费时间,还好找到一篇好文。
前言
Blocks是C语言的扩充功能,而Apple 在OS X Snow Leopard 和 iOS 4中引入了这个新功能“Blocks”。从那开始,Block就出现在iOS和Mac系统各个API中,并被大家广泛使用。一句话来形容Blocks,带有自动变量(局部变量)的匿名函数。
Block在OC中的实现如下:
struct Block_layout {
void *isa;
int flags;
int reserved;
void (*invoke)(void *, ...);
struct Block_descriptor *descriptor;
/* Imported variables. */
};
struct Block_descriptor {
unsigned long int reserved;
unsigned long int size;
void (*copy)(void *dst, void *src);
void (*dispose)(void *);
};
copyright © 2008-2019 亿联网络 版权所有 备案号:粤ICP备14031511号-2