block是帶有自動變量值的匿名函數(shù);
^(int event) {
printf("event=%d",event);
};
實際上,該Block語法使用了省略方式腺晾,其完整形式如下:
^void (int event) {
printf("event = %d",event);
};
如上所示,完整形式的Block語法與一般的C語言函數(shù)相比辜贵,僅有兩點區(qū)別悯蝉。
(1)沒有函數(shù)名;
(2)帶有“^”的符號托慨;
第一點不同是沒有函數(shù)名鼻由,因為它是匿名函數(shù)。第二點不同時返回值類型前帶有“^”的符號(插入記號),因為OS X厚棵,iOS應(yīng)用程序的源代碼中將大量使用Block蕉世,所以插入該極好便于查找;
以下為Block語法的BN范式婆硬。
Block_literal_expression ::= ^ block_decl compound_statement_body
block_decl ::=
block_decl ::= parameter_list
block_decl ::= type_expression
如果此前不了解BN范式狠轻,看看說明也能有個概念吧。
^ 返回值類型 參數(shù)列表 表達(dá)式
返回值類型和c語言函數(shù)的返回值類型一樣彬犯,參數(shù)列表和c語言的參數(shù)列表也是一樣的向楼,表達(dá)式和c語言中允許使用的表達(dá)式也是一樣的查吊,當(dāng)然與c語言函數(shù)一樣,表達(dá)式中含有return語句時湖蜕,其類型必須與返回值類型相同逻卖。
例如可以寫出如下形式的Block語法:
^int (int count){return count + 1;}
雖然前面出現(xiàn)過省略模式,但Block語法可省略好幾個項目昭抒。首先是返回值類型箭阶。
^ 返回值類型 參數(shù)列表 表達(dá)式
省略成----->
^ 參數(shù)列表 表達(dá)式
省略返回值類型時,如果表達(dá)式中有return語句就使用該返回值的類型戈鲁,如果表達(dá)式?jīng)]有return語句就是用void類型仇参。表達(dá)式中含有多個return語句時,所有return的返回值類型必須相同婆殿,前面的源代碼省略其返回值類型是如下所示:
^(int count){return count + 1;}
該Block語法將按照return語句的類型诈乒,返回int型返回值。
其次婆芦,如果不實用參數(shù)怕磨,參數(shù)列表也可省略,以下為不使用參數(shù)的Block語法:
^(void)(void){printf("Blocks\n")}
該源代碼可省略為如下形式:
^{printf("Blocks\n")}
返回值類型以及參數(shù)列表均可被省略的Block語法是大家最為熟知的記錄方式吧消约。
^ 返回值類型 參數(shù)列表 表達(dá)式
省略成----->
^ 表達(dá)式