談到block矾缓,我們通常稱之為代碼塊位仁,那么block的本質(zhì)到底是什么呢携悯?
block的實質(zhì)上是對象, 一個函數(shù)指針, 指向代碼塊, 以及上下文所需的變量;
函數(shù)指針和block的格式對比
函數(shù)指針 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默認都是在棧上創(chuàng)建的, 當block超過作用域, 就會被銷毀, 如果要在作用域外使用block, 應(yīng)copy該block到堆上,