iOS AFNetWorking源码详解(一)

[中文教程]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
查看查看317 回复回复2 收藏收藏 分享淘帖 转播转播 分享分享 微信
查看: 317|回复: 2
收起左侧

[中文教程] iOS AFNetWorking源码详解(一)

[复制链接]
代码买卖 发表于 2016-7-25 02:21:35 | 显示全部楼层 |阅读模式
快来登录
获取优质的苹果资讯内容
收藏热门的iOS等技术干货
拷贝下载Swift Demo源代码
订阅梳理好了的知识点专辑
本帖最后由 代码买卖 于 2016-7-27 22:04 编辑

首先来介绍下AFNetWorking,官方介绍如下:

AFNetworking is a delightful networking library for iOS and Mac OS X. It’s built on top of the Foundation URL Loading System, extending the powerful high-level networking abstractions built into Cocoa. It has a modular architecture with well-designed, feature-rich APIs that are a joy to use.

Perhaps the most important feature of all, however, is the amazing community of developers who use and contribute to AFNetworking every day. AFNetworking powers some of the most popular and critically-acclaimed apps on the iPhone, iPad, and Mac.

Choose AFNetworking for your next project, or migrate over your existing projects—you’ll be happy you did!

iOS AFNetWorking源码详解

iOS AFNetWorking源码详解(一) - 敏捷大拇指 - iOS AFNetWorking源码详解


翻译过来简单来说就是

AFNetworking是一个适用于iOS和Mac OS X两个平台的网络库,它是基于Foundation URL Loading System上进行了一套封装,并且提供了丰富且优美的API接口给使用者使用

iOS AFNetWorking源码详解(一) 1

iOS AFNetWorking源码详解(一) - 敏捷大拇指 - iOS AFNetWorking源码详解(一) 1


相信从star数和fork数来看,大家都能明白这个库是多么的受欢迎了,所以了解这个库对于一个iOS开发来说是极为重要的!

这个是AFNetworking的github地址:GitHub - AFNetworking/AFNetworking: A delightful networking framework for iOS

在使用前阅读README是非常重要的,里面往往包括了这个库的介绍、安装和使用等等,对于快速了解一个库来说,这是非常有帮助的

首先我们在AFNetWorking源码地址里download下来,打开工程文件,可以看到里面内容分为两个部分,一个是AFNetworking,另一个是UIKit+AFNetworking

iOS AFNetWorking源码详解(一) 2

iOS AFNetWorking源码详解(一) - 敏捷大拇指 - iOS AFNetWorking源码详解(一) 2


很明显,第一个是用来做网络请求相关的,第二个则是和UI使用相关的,我们先看第一个

在看完头文件和README之后,你会发现AFURLSessionManager和AFHTTPSessionManager是里面比较重要的两个类



这里我先讲AFURLSessionManager这个类

首先浏览完这个类从API,发现其主要提供了数据的请求、上传和下载功能

在属性方面:

[Objective-C] 纯文本查看 复制代码
@property(readonly,nonatomic,strong)NSArray *tasks;

@property(readonly,nonatomic,strong)NSArray *dataTasks;

@property(readonly,nonatomic,strong)NSArray *uploadTasks;

@property(readonly,nonatomic,strong)NSArray *downloadTasks;


通过这四个属性,我们分别可以拿到总的任务集合、数据任务集合、上传任务集合和下载任务集合

[Objective-C] 纯文本查看 复制代码
@property(nonatomic,assign)BOOL attemptsToRecreateUploadTasksForBackgroundSessions;


这个属性非常重要,注释里面写到,在iOS7中存在一个bug,在创建后台上传任务时,有时候会返回nil,所以为了解决这个问题,AFNetworking遵照了苹果的建议,在创建失败的时候,会重新尝试创建,次数默认为3次,所以你的应用如果有场景会有在后台上传的情况的话,记得将该值设为YES,避免出现上传失败的问题

[Objective-C] 纯文本查看 复制代码
FOUNDATION_EXPORT NSString * const AFNetworkingTaskDidResumeNotification;