簡單介紹:AFN是目前Github里面最流行的OC第三方框架,這個框架十分強(qiáng)大,幾乎封裝了所有的有關(guān)網(wǎng)絡(luò)的功能; 早期的AFN底層使用NSURLConnectionOperation實(shí)現(xiàn)的,iOS6.0以后蘋果推出NSURLSession,后來逐步取代NSURLConnectionOperation,目前的AFN版本已經(jīng)完全摒棄了NSURLConnectionOperation,底層全部由NSURLSession來實(shí)現(xiàn);下面列出AFN框架的功能結(jié)構(gòu):
- NSURLSession
+ AFURLSessionManager
+ AFHTTPSessionManager(封裝了常用的 HTTP 方法)
* GET
* POST
* UIKit + AFNetworking 分類
* NSProgress :利用KVO
- 半自動的序列化&反序列化的功能
+ AFURLRequestSerialization :請求的數(shù)據(jù)格式/默認(rèn)是二進(jìn)制的
+ AFURLResponseSerialization :響應(yīng)的數(shù)據(jù)格式/默認(rèn)是JSON格式
- 附加功能
+ 安全策略
* HTTPS
* AFSecurityPolicy
+ 網(wǎng)絡(luò)檢測
* 對蘋果的網(wǎng)絡(luò)連接檢測做了一個封裝
* AFNetworkReachabilityManager
AFN下載地址:https://github.com/AFNetworking/AFNetworking
使用前請先導(dǎo)入AFN框架文件,并導(dǎo)入頭文件 #import "AFNetworking.h"
1 使用AFN發(fā)送GET請求
1.創(chuàng)建會話管理者對象
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
2.發(fā)送網(wǎng)絡(luò)請求
NSDictionary *dict = @{
@"username":@"jyq",
@"pwd":@"jyq",
@"type":@"JSON"
};
//第一個參數(shù):請求路徑(NSString) (URL地址后面無需添加參數(shù))
//第二個參數(shù):要發(fā)送給服務(wù)器的參數(shù) (傳NSDictionary)
//第三個參數(shù):progress 進(jìn)度回調(diào)
//第四個參數(shù):success 成功的回調(diào)
responseObject:響應(yīng)體(內(nèi)部默認(rèn)已經(jīng)做了JSON的反序列處理)
task.response:響應(yīng)頭信息
//第五個參數(shù):failure 失敗的回調(diào)
[manager GET:@"http://xxx" parameters:dict progress:nil success:
^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"請求成功---%@---%@",responseObject,[responseObject class]);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"請求失敗--%@",error);
}];
2 使用AFN發(fā)送POST請求
1.創(chuàng)建會話管理者對象
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
2.發(fā)送網(wǎng)絡(luò)請求
NSDictionary *dict = @{
@"username":@"jyq",
@"pwd":@"jyq",
@"type":@"JSON"
};
//第一個參數(shù):請求路徑(NSString) (URL地址后面無需添加參數(shù))
//第二個參數(shù):要發(fā)送給服務(wù)器的參數(shù) (傳NSDictionary)
//第三個參數(shù):progress 進(jìn)度回調(diào)
//第四個參數(shù):success 成功的回調(diào)
responseObject:響應(yīng)體(內(nèi)部默認(rèn)已經(jīng)做了JSON的反序列處理)
task.response:響應(yīng)頭信息
//第五個參數(shù):failure 失敗的回調(diào)
[manager POST:@"http://xxx" parameters:dict progress:nil success:
^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"請求成功---%@---%@",responseObject,[responseObject class]);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"請求失敗--%@",error);
}];
對比使用NSURLSession發(fā)送網(wǎng)絡(luò)請求,是不是簡單多了!?
后續(xù)更新使用AFN實(shí)現(xiàn)上傳/下載...