美文网首页
AFN的解读

AFN的解读

作者: nadou23 | 来源:发表于2018-09-19 10:08 被阅读5次
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-AaronDai"
            //如果解析错误,直接返回
            dispatch_async(self.completionQueue ?: dispatch_get_main_queue(), ^{
                failure(nil, serializationError);
            });
#pragma clang diagnostic pop
        }

注意这个方法,我们常用 push pop搭配,来忽略一些编译器的警告.

- (void)setDelegate:(AFURLSessionManagerTaskDelegate *)delegate
            forTask:(NSURLSessionTask *)task
{
    //断言,如果没有这个参数,debug下crash在这
    NSParameterAssert(task);
    NSParameterAssert(delegate);

    //加锁保证字典线程安全
    [self.lock lock];
    // 将AF delegate放入以taskIdentifier标记的词典中(同一个NSURLSession中的taskIdentifier是唯一的)
    self.mutableTaskDelegatesKeyedByTaskIdentifier[@(task.taskIdentifier)] = delegate;
   
    // 为AF delegate 设置task 的progress监听
    [delegate setupProgressForTask:task];
    
    //添加task开始和暂停的通知
    [self addNotificationObserverForTask:task];
    [self.lock unlock];
}

要加锁的原因是因为本身我们这个字典属性是mutable的,是线程不安全的。而我们对这些方法的调用,确实是会在复杂的多线程环境中.

- (void)setupProgressForTask:(NSURLSessionTask *)task {
    
    __weak __typeof__(task) weakTask = task;

    //拿到上传下载期望的数据大小
    self.uploadProgress.totalUnitCount = task.countOfBytesExpectedToSend;
    self.downloadProgress.totalUnitCount = task.countOfBytesExpectedToReceive;
    
    
    //将上传与下载进度和 任务绑定在一起,直接cancel suspend resume进度条,可以cancel...任务
    [self.uploadProgress setCancellable:YES];
    [self.uploadProgress setCancellationHandler:^{
        __typeof__(weakTask) strongTask = weakTask;
        [strongTask cancel];
    }];
    [self.uploadProgress setPausable:YES];
    [self.uploadProgress setPausingHandler:^{
        __typeof__(weakTask) strongTask = weakTask;
        [strongTask suspend];
    }];
__weak __typeof__(task) weakTask = task; __weak的用法得留意,不只是可以用在self

相关文章

  • 搜罗好文章

    不分类别,文章和博客都有,随看随记录。 AFN源码解读AFN源码解读另一个版本正确使用AFNetworking的S...

  • AFN的解读

    注意这个方法,我们常用 push pop搭配,来忽略一些编译器的警告. 要加锁的原因是因为本身我们这个字典属性是m...

  • 通读AFN-从创建manager到数据解析完毕

    流程梳理 今天开始会写几篇关于AFN源码解读的一些Blog,首先要梳理一下AFN的整体结构(主要是讨论2.x版本的...

  • AFN框架基本使用

    一、AFN内部结构 AFN结构体 NSURLConnection: NSURLSession 二、AFN的基本使用...

  • 04 AFN

    一: AFN框架基本使用 #######1.1 AFN内部结构 #######1.2 AFN的基本使用 1, 发送...

  • 多线程网络07

    1 AFN基本使用(GET和POST) 2 AFN实现文件下载 3 AFN实现文件上传 5 AFN序列化相关处理 ...

  • 拿走即用之AFN封装(Swift版)

    AFN封装 一旦AFN有较大的变动,用到AFN的项目需要更改很多的地方,为了避免这种情况,一般会对AFN封装出一个...

  • 拿走即用之afn封装(OC版)

    afn封装 一旦AFN有较大的变动,用到AFN的项目需要更改很多的地方,为了避免这种情况,一般会对AFN封装出一个...

  • AFN

    AFN http://www.jianshu.com/p/047463a7ce9b AFN简介 什么是AFN 全称...

  • iOS开发--AFN框架基本使用

    AFN内部结构 AFN结构体 NSURLConnectionAFURLConnectionOperationAFH...

网友评论

      本文标题:AFN的解读

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