美文网首页
iOS AFNetworking之AFURLConnection

iOS AFNetworking之AFURLConnection

作者: 小沫360 | 来源:发表于2016-02-24 17:09 被阅读930次

    AFNetworking到底帮我们做了那些事情呢?

    这得先从NSURLConnection说起,NSURLConnection提供了

    + (void)sendAsynchronousRequest:(NSURLRequest*) request

    queue:(NSOperationQueue*) queue

    completionHandler:(void (^)(NSURLResponse* __nullable response, NSData* __nullable data, NSError* __nullable connectionError)) handler;

    方法来给我们发送请求,这个请求是在主线程发送的,请求发出后,如果用户一直在操作UI上下滑动屏幕,那在滑动结束前是不会执行回调函数的。苹果一直把动画效果性能放在第一位,估计这也是苹果提升UI动画性能的手段之一。

    所以AFNetworking 创建了一条常驻线程专门处理所有请求的回调事件。网络请求回调处理完,组装好数据后再给上层调用者回调,这时候回调是抛回主线程的,因为主线程是最安全的,使用者可能会在回调中更新UI,在子线程更新UI会导致各种问题,一般使用者也可以不需要关心线程问题。

    AFURLConnectionOperation意义

    那么AFURLConnectionOperation类型的意义就是这样的:封装了底层的NSURLConnection类型,改写成一个可以异步执行的NSOperation,提供执行(包括取消和暂停)和执行状态的接口。通过AFURLConnectionOperation的属性来获取整个操作的结果,如responseData, responseString, error属性等。最后还可以通过进度回调来获取执行过程中的进度信息。

    AFHTTPRequestOperation意义

    AFHTTPRequestOperation类型直接继承上面的AFURLConnectionOperation类型。其意义是在AFURLConnectionOperation类型上,加入了偏向HTTP的处理,如对于整个HTTP操作成功的判断,和暂停和继续处理等。

    1. 关于操作的成功判定

    核心是两个数据,一个是NSIndexSet类型的acceptableStatusCodes代表可以被认为算成功的HTTP返回码,默认就是200-299。另一个数据是NSSet类型的acceptableContentTypes。也就是需要的MIME类型。

    有了这两个数据,AFHTTPRequestOperation就可以判断整个操作是否成功。于是AFHTTPRequestOperation又加入了另一个重要的方法:

    - (void)setCompletionBlockWithSuccess:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success

    failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure;

    相关文章

      网友评论

          本文标题:iOS AFNetworking之AFURLConnection

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