AFNetwork 作用和使用方法具體解釋

轉自:http://www.maxiaoguo.com/clothes/269.html

AFNetworking是一個輕量級的iOS網絡通信類庫。它建立在NSURLConnection和NSOperation等類庫的基礎上,讓非常多網絡通信功能的實現變得十分簡單。它支持HTTP請求和基于REST的網絡服務(包含GET、POST、 PUT、DELETE等)。支持ARC。

Github地址:https://github.com/AFNetworking/AFNetworking

//
//  MJViewController.m
//  03.AFN演練
//
//  Created by apple on 14-4-30.
//  Copyright (c) 2014年 itcast. All rights reserved.
//#import "MJViewController.h"
#import "AFNetworking.h"@interface MJViewController ()@end@implementation MJViewController
/**要使用常規的AFN網絡訪問1. AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];全部的網絡請求,均有manager發起2. 須要注意的是,默認提交請求的數據是二進制的,返回格式是JSON1> 假設提交數據是JSON的,須要將請求格式設置為AFJSONRequestSerializer2> 假設返回格式不是JSON的,3. 請求格式AFHTTPRequestSerializer            二進制格式AFJSONRequestSerializer            JSONAFPropertyListRequestSerializer    PList(是一種特殊的XML,解析起來相對easy)4. 返回格式AFHTTPResponseSerializer           二進制格式AFJSONResponseSerializer           JSONAFXMLParserResponseSerializer      XML,僅僅能返回XMLParser,還須要自己通過代理方法解析AFXMLDocumentResponseSerializer (Mac OS X)AFPropertyListResponseSerializer   PListAFImageResponseSerializer          ImageAFCompoundResponseSerializer       組合*/- (void)viewDidLoad
{[super viewDidLoad];[self reach];
}#pragma mark - 演練
#pragma mark - 檢測網絡連接
- (void)reach
{/**AFNetworkReachabilityStatusUnknown          = -1,  // 未知AFNetworkReachabilityStatusNotReachable     = 0,   // 無連接AFNetworkReachabilityStatusReachableViaWWAN = 1,   // 3G 花錢AFNetworkReachabilityStatusReachableViaWiFi = 2,   // 局域網絡,不花錢*/// 假設要檢測網絡狀態的變化,必須用檢測管理器的單例的startMonitoring[[AFNetworkReachabilityManager sharedManager] startMonitoring];// 檢測網絡連接的單例,網絡變化時的回調方法[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {NSLog(@"%d", status);}];
}#pragma mark - Session 下載
- (void)sessionDownload
{NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:config];NSString *urlString = @"http://localhost/itcast/videos/01.C語言-語法預覽.mp4";urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];NSURL *url = [NSURL URLWithString:urlString];NSURLRequest *request = [NSURLRequest requestWithURL:url];NSURLSessionDownloadTask *task = [manager downloadTaskWithRequest:request progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {// 指定下載文件保存的路徑
//        NSLog(@"%@ %@", targetPath, response.suggestedFilename);// 將下載文件保存在緩存路徑中NSString *cacheDir = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];NSString *path = [cacheDir stringByAppendingPathComponent:response.suggestedFilename];// URLWithString返回的是網絡的URL,假設使用本地URL,須要注意NSURL *fileURL1 = [NSURL URLWithString:path];NSURL *fileURL = [NSURL fileURLWithPath:path];NSLog(@"== %@ |||| %@", fileURL1, fileURL);return fileURL;} completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {NSLog(@"%@ %@", filePath, error);}];[task resume];
}#pragma mark - POST JSON
- (void)postJSON
{AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];NSDictionary *dict = @{@"name": @"zhangsan"};NSDictionary *dict1 = @{@"name": @"wangwu"};NSArray *array = @[dict, dict1];// 設置請求格式manager.requestSerializer = [AFJSONRequestSerializer serializer];// 設置返回格式manager.responseSerializer = [AFHTTPResponseSerializer serializer];[manager POST:@"http://localhost/postjson.php" parameters:array success:^(AFHTTPRequestOperation *operation, id responseObject) {NSString *result = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];NSLog(@"%@", result);} failure:^(AFHTTPRequestOperation *operation, NSError *error) {}];}#pragma mark - 隨機文件名稱上傳
- (void)postUpload1
{// 本地上傳給server時,沒有確定的URL,不好用MD5的方式處理AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];manager.responseSerializer = [AFHTTPResponseSerializer serializer];[manager POST:@"http://localhost/demo/upload.php" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {NSURL *fileURL = [[NSBundle mainBundle] URLForResource:@"頭像1.png" withExtension:nil];// 要上傳保存在server中的名稱// 使用時間來作為文件名稱 2014-04-30 14:20:57.png// 讓不同的用戶信息,保存在不同文件夾中NSDateFormatter *formatter = [[NSDateFormatter alloc] init];// 設置日期格式formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";NSString *fileName = [formatter stringFromDate:[NSDate date]];[formData appendPartWithFileURL:fileURL name:@"uploadFile" fileName:fileName mimeType:@"image/png" error:NULL];} success:^(AFHTTPRequestOperation *operation, id responseObject) {NSLog(@"OK");} failure:^(AFHTTPRequestOperation *operation, NSError *error) {NSLog(@"error");}];
}#pragma mark - POST上傳
- (void)postUpload
{AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];// AFHTTPResponseSerializer就是正常的HTTP請求響應結果:NSData// 當請求的返回數據不是JSON,XML,PList,UIImage之外,使用AFHTTPResponseSerializer// 比如返回一個html,text...//// 實際上就是AFN沒有對響應數據做不論什么處理的情況manager.responseSerializer = [AFHTTPResponseSerializer serializer];// formData是遵守了AFMultipartFormData的對象[manager POST:@"http://localhost/demo/upload.php" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {// 將本地的文件上傳至serverNSURL *fileURL = [[NSBundle mainBundle] URLForResource:@"頭像1.png" withExtension:nil];[formData appendPartWithFileURL:fileURL name:@"uploadFile" error:NULL];} success:^(AFHTTPRequestOperation *operation, id responseObject) {NSString *result = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];NSLog(@"完畢 %@", result);} failure:^(AFHTTPRequestOperation *operation, NSError *error) {NSLog(@"錯誤 %@", error.localizedDescription);}];
}#pragma mark - JSON
- (void)XMLData
{AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];// 返回的數據格式是XMLmanager.responseSerializer = [AFXMLParserResponseSerializer serializer];NSDictionary *dict = @{@"format": @"xml"};// 網絡訪問是異步的,回調是主線程的,因此程序猿不用管在主線程更新UI的事情[manager GET:@"http://localhost/videos.php" parameters:dict success:^(AFHTTPRequestOperation *operation, id responseObject) {// 假設結果是XML,相同須要使用6個代理方法解析,或者使用第三方庫// 第三方庫第三方框架,效率低,內存泄漏NSLog(@"%@", responseObject);} failure:^(AFHTTPRequestOperation *operation, NSError *error) {NSLog(@"%@", error);}];
}#pragma mark - JSON
- (void)JSONData
{AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];// 原本須要拼接get訪問URL ?

& = NSDictionary *dict = @{@"format": @"json"}; // 網絡訪問是異步的,回調是主線程的,因此程序猿不用管在主線程更新UI的事情 [manager GET:@"http://localhost/videos.php" parameters:dict success:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"%@", responseObject); // 提問:NSURLConnection異步方法回調,是在子線程 // 得到回調之后,通常更新UI,是在主線程 NSLog(@"%@", [NSThread currentThread]); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"%@", error); }]; } #pragma mark - POST登錄 - (void)postLogin { AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; // 原本須要拼接get訪問URL ?

& = NSDictionary *dict = @{@"username": @"wangwu", @"password" : @"wang"}; // 網絡訪問是異步的,回調是主線程的,因此程序猿不用管在主線程更新UI的事情 [manager POST:@"http://localhost/login.php" parameters:dict success:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"%@", responseObject); // 提問:NSURLConnection異步方法回調,是在子線程 // 得到回調之后,通常更新UI,是在主線程 NSLog(@"%@", [NSThread currentThread]); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"%@", error); }]; } #pragma mark - GET登錄 - (void)getLogin { AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; // 原本須要拼接get訪問URL ? & = NSDictionary *dict = @{@"username": @"wangwu", @"password" : @"wang"}; // 網絡訪問是異步的,回調是主線程的,因此程序猿不用管在主線程更新UI的事情 [manager GET:@"http://localhost/login.php" parameters:dict success:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"%@", responseObject); // 提問:NSURLConnection異步方法回調,是在子線程 // 得到回調之后,通常更新UI,是在主線程 NSLog(@"%@", [NSThread currentThread]); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"%@", error); }]; } @end



轉載于:https://www.cnblogs.com/zfyouxi/p/5238318.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/373573.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/373573.shtml
英文地址,請注明出處:http://en.pswp.cn/news/373573.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

在MongoDB中存儲分層數據

繼續使用MongoDB進行 NoSQL之旅&#xff0c;我想觸摸一個經常出現的特定用例&#xff1a;存儲分層文檔關系。 MongoDB是很棒的文檔數據存儲&#xff0c;但是如果文檔具有父子關系怎么辦&#xff1f; 我們可以有效地存儲和查詢此類文檔層次結構嗎&#xff1f; 答案是肯定的&…

圖的深度遍歷

圖的深度遍歷 Time Limit: 1000MS Memory Limit: 65536KBSubmit StatisticProblem Description 請定一個無向圖&#xff0c;頂點編號從0到n-1&#xff0c;用深度優先搜索(DFS)&#xff0c;遍歷并輸出。遍歷時&#xff0c;先遍歷節點編號小的。Input 輸入第一行為整數n&#xff…

Linux學習筆記——gzip命令

這個 gzip 程序被用來壓縮一個或多個文件。當執行 gzip 命令時&#xff0c;則原始文件的壓縮版會替代原始文件。 相對應的 gunzip 程序被用來把壓縮文件復原為沒有被壓縮的版本。gzip 選項&#xff1a;選項 說明-c把輸出寫入到標準輸出&#xff0c;并且保留原始文件。也有可能用…

java集合類——Stack類

查看java的API文檔&#xff0c;Stack繼承Vector類。 棧的特點是后進先出。 API中Stack自身的方法不多&#xff0c;基本跟棧的特點有關。 Java代碼 import java.util.Stack; public class StackTest { public static void main(String[] args) { Stack&l…

免裝版_無縫貼圖制作軟件 PixPlant2中文免裝版

點擊上方藍字關注我們如您喜歡我們的公眾號&#xff0c;不妨推薦給身邊的朋友資源介紹&#xff1a;資源來源于網絡&#xff0c;很多時候我們從網上找的貼圖并不是無縫的&#xff0c;而且一般都沒有高光/法線貼圖這些&#xff0c;在材質的模擬上就要差了很多&#xff0c;在這里小…

網頁特效:用CSS3制作3D圖片立方體旋轉特效

<!DOCTYPE html> <html> <head> <meta charset"utf-8" /> <title>CSS3制作3D圖片立方體旋轉特效 - 站長素材</title><style type"text/css">html{background:linear-gradient(#ff0 0%,#F00 80%);height: 100%; …

Java中使用Map and Fold進行功能性編程

在函數式編程中&#xff0c;Map和Fold是兩個非常有用的運算符&#xff0c;它們屬于每種函數式語言。 如果Map和Fold運算符是如此強大且必不可少&#xff0c;那么您如何解釋說即使Java編程語言缺少這兩個運算符&#xff0c;我們也可以使用Java來完成工作&#xff1f; 事實是&…

Linux 文件壓縮解壓縮

文章來自&#xff1a;http://www.xuexiyuan.cn/article/detail/53.html *.tar格式 解包1&#xff1a;$ tar -xvf FileName.tar解包2&#xff1a;$ tar -xvf FileName.tar -C DirName# tar解壓縮到指定目錄打包&#xff1a;$ tar -cvf FileName.tar DirName# tar是打包&#x…

Mysql 分頁語句Limit用法

Mysql 分頁語句Limit用法 1、Mysql的limit用法 在我們使用查詢語句的時候&#xff0c;經常要返回前幾條或者中間某幾行數據&#xff0c;這個時候怎么辦呢&#xff1f;不用擔心&#xff0c;mysql已經為我們提供了這樣一個功能。 Sql代碼 SELECT * FROM table LIMIT [offset,] r…

sqlmap指定cookie_利用SQLMap進行cookie注入

SQLMap被稱為注入神器&#xff0c;N多大神都使用SQLmap來進行注入測試&#xff0c;我等小菜當然也會用來裝一下A*C&#xff0c;用了N久SQLMAP了&#xff0c;但是極少用 到cookie注入&#xff0c;一遇到cookie注入就去使用注入中轉工具&#xff0c;比較麻煩。剛好今天群里的USB問…

c語言else匹配問題

1 #include <stdio.h>2 #include <stdlib.h>3 4 //實現 依次輸入三個遞增的數 然后正確輸出5 6 //為什么得不到我們想要的結果呢 這就是else匹配的問題 當然了 在編譯器里面他會自動給你匹配7 //但是如果沒有了編譯器 筆試的時候呢。。。。8 //原因為&#xff1a;e…

Java:偽造工廠的閉包以創建域對象

最近&#xff0c;我們想要創建一個域對象&#xff0c;該對象需要具有外部依賴關系才能進行計算&#xff0c;并且希望能夠在測試中解決該依賴關系。 最初&#xff0c;我們只是在領域類中新建依賴項&#xff0c;但這使得無法在測試中控制其值。 同樣&#xff0c;我們似乎不應該將…

利用scp 遠程上傳下載文件/文件夾

利用scp傳輸文件 1、從服務器下載文件 scp usernameservername:/path/filename /tmp/local_destination 例如scp codinglog192.168.0.101:/home/kimi/test.txt 把192.168.0.101上的/home/kimi/test.txt 的文件下載到 /tmp/local_destination 2、上傳本地文件到服務器 scp /…

KEIL編譯錯誤總結:

1 expected an identifier&#xff1a;#define宏定義常量后&#xff0c;如果再用前面定義的常量作為枚舉常量就會報錯&#xff0c;方法&#xff0c;去掉#define宏定義 2 ERROR L118: REFERENCE MADE TO ERRONEOUS EXTERNAL 定義的變量和外部聲明調用的變量存儲類型不一致&#…

視覺平衡與物理平衡_設計中的平衡理論為什么這么重要?

原標題&#xff1a;設計中的平衡理論為什么這么重要&#xff1f;在平面設計中很重要的理論就是關于平衡的應用。無論在logo設計還是網頁設計還是海報設計中&#xff0c;一個好的設計一定會兼顧視覺的平衡。今天123標志網就跟大家一起看看平衡的力量。構圖平衡主要意味著調整設計…

Tomcat、JDK 歷史版本下載地址

Tomcat 歷史版本下載地址http://archive.apache.org/dist/tomcat/ JDK 歷史版本下載地址 https://www.oracle.com/technetwork/java/javase/archive-139210.html 個人博客&#xff1a;學習園 原文地址&#xff1a;http://www.xuexiyuan.cn/article/detail/190.html

JavaFX移動應用程序最佳實踐,第2部分

警告&#xff1a;我在這里給出的技巧對于JavaFX Mobile的當前版本是正確的&#xff0c;該版本是JavaFX 1.1 SDK的一部分。 在將來的版本中&#xff0c;行為將改變&#xff0c;上述工件的當前不良性能將被優化或至少得到顯著改善。 我在這里寫的所有內容都是快照&#xff0c;不應…

14軟件工程第一次作業

你認為一些軍事方面的軟件系統采用什么樣的開發模型比較合適&#xff1f; 我認為設計軍事方面的軟件采用螺旋式的開發模型比較好。因為螺旋模型減少了過多測試或者是測試不足所帶來的風險&#xff0c;能夠使軟件在無法排除重大風險時有機會停止&#xff0c;減少損失。對于軍事方…

波紋擴散_C4D_動畫amp;RS波紋擴散效果J_014

C4D-效果擴散效果&#xff0c;Redshift混合冰材質&#xff1b;利用頂點貼圖擴散效果制作&#xff0c;RS混合調用頂點貼圖。視頻教程時長22分鐘。對象為可編輯對象才能用頂點貼圖。冰結域的擴展是這個動畫的重點&#xff0c;在這個模式下&#xff0c;權重會根據半徑向外擴展&…

軟件測試工程師簡歷項目經驗怎么寫?--9999個已成功入職的軟件測試工程師真實簡歷

簡歷是我們求職的第一步&#xff0c;也是非常重要的一步。 青云叔叔看過太多簡歷&#xff0c;最快3秒就淘汰一份簡歷&#xff0c;因為其實我們每天要收到很多簡歷進行篩選&#xff0c;那么面試官其實也是會很快進行對簡歷進行判斷的&#xff0c;如果你對簡歷寫的一塌糊涂&…