Block簡介及寫法

2021-07-09 15:44:03 字數 1531 閱讀 5442

一:block簡介

block的實際行為和function很像,最大的差別是在可以訪問同乙個scope的變數值。block實體形式如下:

^(傳入引數列);

block實體開頭是「^」,接著是由小括號所包起來的引數列(比如 int a, int b, int c),行為主體

由大括號包起來,專有名字叫做block literal。行為主體可以用return回傳值,型別會被compiler自動辨別。如果沒有引數列要寫成: ^(void); 可以寫成:^();^;

有引數列就必須寫成:

^(int a,nsstring* name);

二,block pointer

block pointer是這樣定義的:

回傳值(^名字)(引數列);

//宣告乙個blockd的block pointer,其所指向的block有乙個int輸入和int輸出

int(^blockd)(

int); 

//將block實體指定給

blockd 變數

blockd = ^(int

a); 

//呼叫方法,很像function的用法

intresult = blockd(5); 

nslog(@

"%d"

, result);  

三,block在開發中的推薦的寫法,邏輯清晰

typedef void(^backtoreloadtableviewblock)(void);//定義乙個block型別別名backtoreloadtableviewblock,代表改block型別

@property(copy,nonatomic)backtoreloadtableviewblock backblock;//宣告乙個backblock變數,屬於

backtoreloadtableviewblock型別

2,簡單寫法

@property(copy,nonatomic) void(^backtoreloadtableviewblock)(void);//直接定義乙個backtoreloadtableviewblock變數 (block型別的變數)

兩種寫法的理解:

1,typedef void(^backtoreloadtableviewblock)(void); 擴充套件理解為:

typedef void(^)(void) 

backtoreloadtableviewblock;  表示定義乙個別名

backtoreloadtableviewblock 來代表該block

2,void(^

backtoreloadtableviewblock

)(void); 擴充套件理解為:

void(^

)(void) 

backtoreloadtableviewblock;定義了乙個

backtoreloadtableviewblock的變數;

ios開發中, Block的簡介及用法

block簡介 block的實際行為和function很像,最大的差別是在可以訪問同乙個scope的變數值。block實體形式如下 傳入引數列 block實體開頭是 接著是由小括號所包起來的引數列 比如 int a,int b,int c 行為主體由大括號包起來,專有名字叫做block litera...

IOS中 Block簡介與用法

block簡介 block的實際行為和function很像,最大的差別是在可以訪問同乙個scope的變數值。block實體形式如下 傳入引數列 block實體開頭是 接著是由小括號所包起來的引數列 比如 int a,int b,int c 行為主體由大括號包起來,專有名字叫做block litera...

IOS中 Block簡介與用法

block簡介 block的實際行為和function很像,最大的差別是在可以訪問同乙個scope的變數值。block實體形式如下 傳入引數列 block實體開頭是 接著是由小括號所包起來的引數列 比如 int a,int b,int c 行為主體由大括號包起來,專有名字叫做block litera...