美文网首页
函数+Block封装用Block作回调的函数

函数+Block封装用Block作回调的函数

作者: mqhong | 来源:发表于2016-07-29 10:48 被阅读72次

图片1.jpg

2016年06月22日星期三


有时候,我们在想封装一个带有block回调的函数,比如常用的AFNetworking,或者Alomfire(名字如果错了,不要在意),就会有个小问题,函数是不能通过block返回任何参数的。可以这么理解(至少我现在是这么想的):函数,是同步执行的,它在执行的时候是不会停下来的。block却不是这样的,block相当于是异步执行,另外开一个线程去搞这个事情。所以,这就有个问题,当你想封装带block的函数,并且获取到他的block内的参数,用函数是没有办法的。函数已经执行完毕并且被内存释放掉了,你block才把回调传过来,这么写,xcode就会提醒你是不行的。

但是,在看同事代码的时候,我非常惊喜的发现(MDZZ)可以在函数后面跟一个或者几个block,然后在函数内部,给函数的block赋予内部封装的block的值。 具体的实现可以参考如下:

-(void)MMhttpService:(NSString *)url parame:(NSDictionary *)parame success:(void (^)(id))success fail:(void (^)(id))failuer{
    AFHTTPSessionManager *manage = [AFHTTPSessionManager manager];
    manage.requestSerializer.timeoutInterval = 10.0f;//设置10秒后就爆炸
    [manage POST:url parameters:parame progress:^(NSProgress * _Nonnull uploadProgress) {
        //tudo
        NSLog(@"这里执行的是progress 代码块");
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        //通过这个方式,来进行封装block的参数外传
        success(responseObject);
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        failuer(error);
    }];
}

实现的时候就是这个牛🐂样

MM_NetWorking *mm = [[MM_NetWorking alloc]init];
    [mm MMhttpService:@"url" parame:@{} success:^(id response) {
        NSLog(@"这是成功的咯%@",response);
    } fail:^(id error) {
        NSLog(@"这是失败的咯%@",error);
    }];

完美!

相关文章

  • 函数+Block封装用Block作回调的函数

    2016年06月22日星期三 有时候,我们在想封装一个带有block回调的函数,比如常用的AFNetworking...

  • iOS Block

    block本质block是封装了函数调用以及函数调用环境的OC对象(它内部也有个isa指针) 函数调用环境:函数调...

  • iOS开发之Block

    block的本质 block本质上也是一个OC对象,它内部也有个isa指针。 block是封装了函数调用以及函数调...

  • block基础-1

    block块是在ios4开始,就出现了。block实质就是C语言的回调函数。block函数定义如下 void (^...

  • block的本质

    block的本质 block本质上也是一个oc对象,他内部也有一个isa指针。block是封装了函数调用以及函数调...

  • iOS中block的用法

    定义block类型 定义block块,代码更清新 函数中定义block回调的方法 持续补充中......

  • Block详解-小码哥

    block本质 block的本质是封装了函数调用和函数调用环境的OC对象。 block结构 Block_layou...

  • Block 原理面试(1)

    玖:Block 原理面试(1) block的原理是怎样的?本质是什么?答:Block 的本质是一个封装了函数及其调...

  • Block底层原理

    一、block的本质是什么: block本质上也是一个OC对象,它内部也有个isa指针 block是封装了 函数调...

  • Block(回调函数)

    概念:Block就是一个函数体(匿名函数),它是ObjC对于闭包的实现,在块状中我们可以持有或引用局部变量 Blo...

网友评论

      本文标题:函数+Block封装用Block作回调的函数

      本文链接:https://www.haomeiwen.com/subject/npkzjttx.html