IOS Block 基礎(chǔ)用例

Block這渣渣,對(duì)于剛寫IOS的人,肯定都是有很多疑惑的,我們先來說明Block的語法及用例。

block聲明定義.jpeg

1.定義一個(gè)Block

int num1 = 2;

定義一個(gè)名為myBlock,返回值為int參數(shù)為空的 block    
int (^myBlock)(void) = ^(void) {
return 10;
};
myBlock();
        
int (^myBlock1)(int) = ^(int num){
return num * 10;
};
myBlock1(num1);
    
void (^myBlock2)(int,int) = ^(int num1,int num2){
NSLog(@"num1 is : %d  num2 is : %d ",num1,num2);
};
myBlock2(num1,100);

2.把block當(dāng)做參數(shù)


blockMethod.png
blockMethod-1.png
-(void) addPullToRefreshBlock:(void(^)(void))block {
    _cardTableView.mj_header = [MyMJHeader headerWithRefreshingBlock:^{
        block();
    }];
}

3.把block當(dāng)做返回值

- (void (^)(void)) method;

4.typedef block

typedef void (^BoolBlock)(BOOL);//一個(gè)只接受一個(gè)BOOL參數(shù),沒有返回值的block

typedef int (^IntBlock)(void);//一個(gè)沒有參數(shù),返回int的block
typedef BoolBlock (^HugeBlock)(IntBlock);//看看,這個(gè)HugeBlock的參數(shù)和返回值都是block

同樣,利用typedef后的 block 類型,就可以簡化上面各種寫法
例如:
block參數(shù)
-(void) addPullToRefreshBlock:RefreshBlock block{
  //code
}
返回block
-(BoolBlock) method;

5.類的成員變量

利用上面的 typedef后的類型
@property (copy,nonatomic) BoolBlock myBlock;

6.全局block

static int(^maxIntBlock)(int, int) = ^(int a, int b){return a>b?a:b;};
int main()
{
    printf("%d\n", maxIntBlock(2,10));  
    return 0;
}

7.__block

如果要在block內(nèi)修改block外聲明的棧變量,那么一定要對(duì)該變量加__block標(biāo)記
int main()
{
    __block int i = 1024;
    BoolBlock bBlock = ^(BOOL bV) {
        if (bV) {
            i++;//如果沒有__block標(biāo)記,是無法通過編譯的。
        }
    };
}

參考資料:http://www.dreamingwish.com/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 《Objective-C高級(jí)編程》這本書就講了三個(gè)東西:自動(dòng)引用計(jì)數(shù)、block、GCD,偏向于從原理上對(duì)這些內(nèi)容...
    WeiHing閱讀 10,118評(píng)論 10 69
  • Block基礎(chǔ)回顧 1.什么是Block? 帶有局部變量的匿名函數(shù)(名字不重要,知道怎么用就行),差不多就與C語言...
    Bugfix閱讀 6,926評(píng)論 5 61
  • 前言 Blocks是C語言的擴(kuò)充功能,而Apple 在OS X Snow Leopard 和 iOS 4中引入了這...
    小人不才閱讀 3,886評(píng)論 0 23
  • *面試心聲:其實(shí)這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個(gè)offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,666評(píng)論 30 472
  • 2.1 Blcoks概要 2.1.1 什么是Blocks Blocks是C語言的擴(kuò)充功能——“帶有自動(dòng)變量(即局部...
    SkyMing一C閱讀 2,464評(píng)論 6 18

友情鏈接更多精彩內(nèi)容