Block的深入与浅出
2018-07-23 本文已影响0人
隔岸相望不相忘
谈到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到堆上,