一: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...