dispatch_block_t 简单的实现不带参数的回调函数

来源:互联网 发布:bi 数据分析 编辑:程序博客网 时间:2024/06/07 21:05

通常我写一个不带参数的块回调函数是这样写的

在 . h 头文件中

定义类型

typedef void (^leftBlockAction)();

在定义一个回调函数

-(void)leftButtonAction:(leftBlockAction)leftBlock;

在.m 文件中

-(void)leftButtonAction:(leftBlockAction)leftBlock{    leftBlock();}

今天学会一个高大上的方法

只要在.h 头文件定义属性方法

@property (nonatomic,copy) dispatch_block_t leftBlockAction;

在.m文件 调用的方法里调用

 if (self.leftBlockAction) {        self.leftBlockAction();    }

在另个模块里直接

    MyView *alert = [[MyView alloc]init];    alert.leftBlockAction = ^() {        NSLog(@"left button clicked");    };

当然了也可以

@property (nonatomic, copy) void(^signInBlock)(NSString *);
if (self.signInBlock) {                    self.signInBlock(@"今天您已经签到了");                }

其他都相同,这样也就简单了不少。

当然也有如下用法

typedef void (^DownloadSuccess) (NSString *downloadURL, NSData *data);typedef void (^DownloadFailure) (BNetworkError *error, id JSON);typedef void (^DownloadProgress) (CGFloat progress);
if (success){                dispatch_block_t block = ^{                    success(url, data);                };                if ([NSThread isMainThread] == NO) {                    dispatch_async(dispatch_get_main_queue(), block);                }else{                    block();                }            }
0 0
原创粉丝点击