談到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到堆上,