Block的深入与浅出

谈到block,我们通常称之为代码块,那么block的本质到底是什么呢?

block的实质上是对象, 一个函数指针, 指向代码块, 以及上下文所需的变量;

函数指针和block的格式对比

函数指针 void(*fun)(int)

block void(^fun)(int)

blcok的书写形式如下:

//无参无返回值

typedef void (^blockWithoutParameterAndValue)();

//无参有返回值

typedef  NSString* (^blockWithValueButParameter)();

//有参无返回值

typedef void (^blockWithParameterButvalue)(NSString *string, float a);

//有参有返回值

typedef NSString *(^blockWithParameterAndvalue)(NSString *string,float b);

block默认都是在栈上创建的, 当block超过作用域, 就会被销毁, 如果要在作用域外使用block, 应copy该block到堆上,

你可能感兴趣的:(Block的深入与浅出)