Block在IOS中使用是非常普遍的,新手來講,對於一些簡答的項目有時候或許是整個項目中都不會有用到,但是作爲一個資深的IOS開發工程師來講,Block是必須使用的一個東西,作爲一個新手來講,我之前一直對Block不怎麼看重,但是隨着項目難度的不斷加大,Block漸漸的還是走入我的開發路程中。
新手來說,Block在剛開始接觸的時候是很不好理解的,因爲怎麼講呢,書寫習慣和我們平時寫的OC語句格式不太一樣,之前也是看過這方面的文章,好像是說block語法來源於C 而不是OC (具體忘記了)這句話不要太當真·····
先說說Block的書寫格式
第一種:直接在方法裏面來定義,然後在方法裏面來實現,比如
-(void)testBlock3{
void (^Myblock)(NSString *) = ^(NSString *str){
NSLog(@"%@",str);
};
Myblock(@"臥槽 這J8");
}
在這個Block裏面 需要說明的是有幾點小得問題,這些都僅僅是針對沒有用過Block的新手用得
第一、Block其實就相當於是一個方法,不過他是寫在方法裏面的。所以你看上面的幾句代碼, 在上面定義了參數,但是在後面使用的時候才傳參,這個有點類似於Java中的形參。
第二、各參數的意義:void 這個和我們平時寫oc一樣,就是這個block的返回值 也可以是NSString、int 等
Myblock這個就是這個Block名(可以理解爲是方法名)
NSString是這個方法需要傳入的參數類型,可以是int、void ,當然也可以有多個參數,中間直接用,號隔開比如說這樣
=號右邊的 (注意:有一個^)括號裏面的和前面的對應,這裏面是形參void (^MyBlock)(NSString *,NSString *) = ^(NSString *str ,NSString *string)
{}裏面是方法的實現
最後看看Myblock 這個就完全相當於是java裏面的方法調用了Myblock就是方法名後面括號就是要傳入的參數
第二種:其實和第一種是一樣的,只不過是實現一個全局的Block
這裏藉助於typedef,大家應該都有用過typedef 這個是給類型起一個別名,但是在這裏用法有一點點區別
這樣就相當於是定義了一個全局的Block,用法是這樣的typedef void (^MyBlockTest)(NSString *);
-(void)testBlock3{ MyBlockTest test = ^(NSString *str){ NSLog(@"%@",str); }; test(@"臥槽 這J8"); }