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在实际开发中怎样使用也需要注意

你可能感兴趣的:(typedef 和作为属性的block以及多个block之间的混合使用)