AFN底层实现面试问题

1. AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]使用了什么设计模式?

回答:工厂模式
误区:很容易认为是单例模式


翻看源码:
我们发现没有任何单例模式的踪迹。

+ (instancetype)manager {
    return [[[self class] alloc] initWithBaseURL:nil];
}
2.在AFURLSessionManager中出现了如下代码的作用何在?
[self.session getTasksWithCompletionHandler:^(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks) {
        for (NSURLSessionDataTask *task in dataTasks) {
            [self addDelegateForDataTask:task uploadProgress:nil downloadProgress:nil completionHandler:nil];
        }

        for (NSURLSessionUploadTask *uploadTask in uploadTasks) {
            [self addDelegateForUploadTask:uploadTask progress:nil completionHandler:nil];
        }

        for (NSURLSessionDownloadTask *downloadTask in downloadTasks) {
            [self addDelegateForDownloadTask:downloadTask progress:nil destination:nil completionHandler:nil];
        }
    }];

回答: 置空当前Session里面的任务
1.异步的获取当前session的所有未完成的task。其实讲道理来说在初始化中调用这个方法应该里面一个task都不会有
2.这是为了防止后台回来,重新初始化这个session,一些之前的后台请求任务,导致程序的crash。(后台任务重新回来初始化session,可能就会有先前的任务,这个时候就需要置空这些任务)

3.AFNetworking 2.0 和3.0 的区别

回答:
1.AFN3.0剔除了所有的NSURLConnection请求的API
2.AFN3.0使用NSOperationQueue代替AFN2.0的常驻线程

你可能感兴趣的:(AFN底层实现面试问题)