IOS系列——Block的基本使用

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  這個是給類型起一個別名,但是在這裏用法有一點點區別

typedef void (^MyBlockTest)(NSString *);
這樣就相當於是定義了一個全局的Block,用法是這樣的
-(void)testBlock3{
    MyBlockTest test = ^(NSString *str){
        NSLog(@"%@",str);
    };
    test(@"臥槽  這J8");
}
發佈了59 篇原創文章 · 獲贊 3 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章