typedef 和作為屬性的block以及多個block之間的混合使用

如果單純的寫一個block來保存代碼, 在開發中往往比較麻煩,尤其我們在很多地方都想要用到這個block的時候更是冗雜, 所以很多時候我們都typedef或者把block作為屬性,這樣的話使用起來會非常方便

一: 示例

typedef void (^RefreshPeripheralData)(NSMutableArray *allMachines,BOOL isFirst);//刷新數據回調

typedef void (^disConnectFinish)(RefreshPeripheralData finishBlock,NSError *error);//手動斷開連接回調

@interface BleCentralManager : NSObject

@property (copy,nonatomic)RefreshPeripheralData 
didRefresh;

@property (copy,nonatomic)disConnectFinish disConnectFinish;//手動斷開連接回調
@end
  • 1:
```表示定義一個接收allMachines數組和BOOL類型isFirst兩個參數的并且無返回值的block, block類型為RefreshPeripheralData

+ 2: 

typedef void (^disConnectFinish)(RefreshPeripheralData finishBlock,NSError *error);


+ 3:
```@property (copy,nonatomic)RefreshPeripheralData 
didRefresh;
```表示定義了一個RefreshPeripheralData類型的屬性didRefresh這個block
當然didRefresh是RefreshPeripheralData類型的,也就意味著,在使用時,didRefresh同樣需要接收兩個參數

+ 4:
```@property(copy,nonatomic)disConnectFinish disConnectFinish;
``` 與示例3同理,disConnectFinish是一個block,當然也可以定義一個屬性,當然這個重新定義的block因為是disConnectFinish類型的,與示例3不同的是,他接收的兩個參數中,有一個也同樣是block

###二: 使用范例

+ 1:
didRefresh 的使用范例
```objc
if(self.didRefresh)
{
    self.didRefresh(self.allMachines,NO);
}

這里的```self.didRefresh(self.allMachines,NO);


+ 2: 
disConnectFinish 的使用范例
```objc
if (self.disConnectFinish)
 {
     self.disConnectFinish(self.didRefresh,erro);
}

上面已經有講解,不再多說, 接收self.didRefresh這個block 作為參數

  • 3:
    兩個block在一個方法中的混合使用范例:
  • 1: 定義一個方法其中finish參數為disConnectFinish 這個block
-(void)disconnectIndex:(MachineModel *)model finish:(disConnectFinish)finish{//斷開連接
    if (finish) {
        self.disConnectFinish = finish;
    }
}
    ```
如果當使用時,傳入的block有值,也就是說finish有值的話,就會執行```self.disConnectFinish = finish```這個方法
 - 2: 當使用時調用
```objc
[self disconnectIndex:self.machineModel finish:^(RefreshPeripheralData finishBlock, NSError *error) {
            [SVProgressHUD dismiss];
       
        }];

因為之前定義時,finish參數為disConnectFinish類型的block,所以在使用時,finish也就傳入^(RefreshPeripheralData finishBlock, NSError *error)
這樣, 一個方法中就混合了兩個block的使用

三: block的使用注意點

如果在block中要修改外面屬性的值的時候, 要在其前面加上__block,當然弱指針的self在實際開發中怎樣使用也需要注意

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容