精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

iOS網(wǎng)絡(luò)請求相關(guān)框架的使用

移動開發(fā)
關(guān)于iOS相關(guān)技術(shù)的博客非常非常多了,沒有好的內(nèi)容也不想寫,最近在迭代公司項(xiàng)目版本,對于這個(gè)題材也想了很久,看了很多類似的文章,決定記錄一下。網(wǎng)絡(luò)請求,是客戶端開發(fā)中一個(gè)很重要的模塊,關(guān)于此方面需要了解的東西也是非常多的,此篇文章僅介紹自己用過的有關(guān)框架。

關(guān)于iOS相關(guān)技術(shù)的博客非常非常多了,沒有好的內(nèi)容也不想寫,最近在迭代公司項(xiàng)目版本,對于這個(gè)題材也想了很久,看了很多類似的文章,決定記錄一下。網(wǎng)絡(luò)請求,是客戶端開發(fā)中一個(gè)很重要的模塊,關(guān)于此方面需要了解的東西也是非常多的,此篇文章僅介紹自己用過的有關(guān)框架。

AFNetworking

1. 關(guān)于AFNetworking

只要是做iOS開發(fā)的應(yīng)該都是知道這個(gè)框架的,有多優(yōu)秀我就不贅述了。自iOS9之后蘋果棄用了NSURLConnection只用NSURLSession,所以AFN從3.0版本開始就刪除了基于NSURLConnection API的所有支持,基于NSURLSession框架以及NSOperation進(jìn)行的封裝開發(fā)。

2. 基于AFNetworking進(jìn)行網(wǎng)絡(luò)請求

既然用的是第三方框架,那么肯定會有一些局限性。框架的迭代更新都會影響我們的代碼,所以盡可能解耦,一般我們都會單獨(dú)的寫一個(gè)網(wǎng)絡(luò)請求工具類對框架進(jìn)行封裝。這樣即使框架更改了,也只需要更改工具類相關(guān)代碼。

a.新建網(wǎng)絡(luò)請求工具類,實(shí)例化AFHTTPSessionManager。類似如下 :

  1. + (instancetype)sharedInstance 
  2.     static dispatch_once_t onceToken; 
  3.     dispatch_once(&onceToken, ^{ 
  4.         _mutParamares = [NSMutableDictionary dictionary]; 
  5.         _manager = [AFHTTPSessionManager manager]; 
  6.         _manager.requestSerializer = [AFHTTPRequestSerializer serializer]; 
  7.         _manager.requestSerializer.timeoutInterval = 30.0f; 
  8.         [AFNetworkActivityIndicatorManager sharedManager].enabled = YES; 
  9.         _manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/html", @"text/json"
  10.                                                               @"text/plain", @"text/javascript", @"text/xml", @"image/*", nil]; 
  11.     }); 

兩個(gè)需要注意的問題:***,這里的網(wǎng)絡(luò)請求工具類是一個(gè)單利,為什么要用單利呢? [AFHTTPSessionManager manager]跟蹤到這個(gè)方法里,會看到返回的manager并不是單利,如果每次請求都實(shí)例化一個(gè)manager的話,那么有可能造成內(nèi)存泄漏。第二,有時(shí)候請求失敗的原因是AFN支持的response類型和服務(wù)器返回給我們的類型不一致,需要修改AFN的源碼進(jìn)行修改,但用Cocoapods來管理三方框架,pod update之后修改的代碼又會被重置。此時(shí),就可以通過acceptableContentTypes屬性來根據(jù)需要設(shè)置。

  1. + (instancetype)manager { 
  2.     return [[self alloc] initWithBaseURL:nil]; 

也可以通過requestSerializer屬性設(shè)置請求頭相關(guān)的信息。如:

  1. [self.manager.requestSerializer setValue:@"" forHTTPHeaderField:@""]; 

b.常用的網(wǎng)絡(luò)請求類型。這是對外的API,外部通過調(diào)用這些接口實(shí)現(xiàn)相關(guān)的網(wǎng)絡(luò)請求。當(dāng)然你也可以根據(jù)自己的需要暴露相關(guān)的API。相應(yīng)的接口實(shí)現(xiàn)比較簡單。具體的邏輯還應(yīng)根據(jù)業(yè)務(wù)需求在外部實(shí)現(xiàn)。對于文件的操作,如圖片的上傳,可參考代碼如下。

iOS網(wǎng)絡(luò)請求相關(guān)框架的使用

  1. image.png 
  2.     // 上傳多張圖片 
  3.     [_manager POST:url parameters:param constructingBodyWithBlock:^(id<afmultipartformdata>  _Nonnull formData)  { 
  4.         for (UIImage *image in imgArray) { 
  5.             UIImage *resizeImage = image.reSizeImage; 
  6.             NSData *data  = UIImagePNGRepresentation(resizeImage); 
  7.             [formData appendPartWithFileData:data name: @"file" fileName:[NSString stringWithFormat:@"img%ld.png",i] mimeType:@"image/png"]; 
  8.     }];</afmultipartformdata> 

上傳多張圖片的時(shí)候,根據(jù)需要可對圖片進(jìn)行裁剪和壓縮。關(guān)于上傳的進(jìn)度可以通過progressBlock返回在對應(yīng)的UI上進(jìn)行顯示,進(jìn)度的計(jì)算公式如下。

  1. processBlock(progress.completedUnitCount / progress.totalUnitCount); 

c.監(jiān)測網(wǎng)絡(luò)狀態(tài)。

  1. AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager]; 
  2. [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { 
  3.     switch (status)  { 
  4.         case AFNetworkReachabilityStatusUnknown: break; 
  5.         case AFNetworkReachabilityStatusNotReachable: break; 
  6.         case AFNetworkReachabilityStatusReachableViaWWAN:  break; 
  7.         case AFNetworkReachabilityStatusReachableViaWiFi:  break; 
  8.     } 
  9. }]; 
  10. [manager startMonitoring]; 

以上是基于AFNetworking的網(wǎng)絡(luò)請求。上面說的這種網(wǎng)絡(luò)請求方式是集約式的網(wǎng)絡(luò)請求,也就是所有的API都調(diào)用的是這個(gè)工具類。還有一種網(wǎng)絡(luò)請求方式是離散式的,也就是每一個(gè)API都有自己對應(yīng)的類。

YTKNetwork

1. 關(guān)于YTKNetwork

這個(gè)框架也是基于AFNetworking進(jìn)行的再次封裝,適用于規(guī)模較大的項(xiàng)目中。YTKNetwork是離散式的網(wǎng)絡(luò)請求方式,如上所述,每一個(gè)請求都對應(yīng)一個(gè)對象,可根據(jù)需要對相應(yīng)的請求進(jìn)行定制化。另外YTKNetwork支持批量網(wǎng)絡(luò)請求發(fā)送并設(shè)置統(tǒng)一回調(diào)、支持相互依賴的網(wǎng)絡(luò)請求等等功能。

2. 基于YTKNetwork進(jìn)行網(wǎng)絡(luò)請求

a. 同上,不建議直接使用第三方,自己寫一個(gè)BaseRequest類繼承YTKRequest,在這個(gè)類里面實(shí)現(xiàn)下面這個(gè)方法。這個(gè)方法是所有請求的Response。

  1. - (void)startWithCompletionBlockWithSuccess:(YTKRequestCompletionBlock)success failure:(YTKRequestCompletionBlock)failure{} 

b. 寫一個(gè)網(wǎng)絡(luò)請求配置類。在程序啟動的時(shí)候通過YTKNetworkConfig配置網(wǎng)絡(luò)請求。如baseUrl參數(shù)等。通過YTKNetworkAgent設(shè)置一些參數(shù),如上面提到的acceptableContentTypes參數(shù)。這個(gè)類是真正發(fā)起請求的類,也是在這個(gè)類中與AFN打交道。

 

  1. _config = [YTKNetworkConfig sharedConfig]; 
  2. _config.baseUrl = BASE_INTERFACE_URL_DEV; 
  3.  
  4.  YTKNetworkAgent *agent = [YTKNetworkAgent sharedAgent]; 
  5.  NSSet *acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/plain", @"text/html", @"text/css", nil]; 
  6.  NSString *keypath = @"jsonResponseSerializer.acceptableContentTypes"
  7. [agent setValue:acceptableContentTypes forKeyPath:keypath]; 

3.以一個(gè)具體的API(請求用戶信息)請求為例。

3.1 新建一個(gè)UserInfoAPI類,繼承你寫的BaseRequest類。

3.2 實(shí)現(xiàn)以下方法。請求的URL,和外部無關(guān),不需要外面?zhèn)鬟M(jìn)來。請求的類型,以及請求的參數(shù)。當(dāng)然,解析也可以在API類內(nèi)部實(shí)現(xiàn)。通過在GET方法里面實(shí)現(xiàn)數(shù)據(jù)的轉(zhuǎn)換和解析。

  1. - (NSString *)requestUrl { 
  2.     return kUserURL; 
  3. - (YTKRequestMethod)requestMethod { 
  4.     return YTKRequestMethodPOST; 
  5. - (instancetype)requestArgument { 
  6.     return parameter; 

serverRespData是基類自定義的一個(gè)參數(shù),是數(shù)據(jù)過濾之后的response。

  1.  _serverRespData = [self.responseJSONObject objectForKey:@"data"]; 
  2. - (QDZQUseModel *)user { // 重寫user的get方法。 
  3.     _user = [QDZQUserEntity yy_modelWithDictionary:[self.serverRespData objectForKey:@"appUser"]]; 
  4.     return _user; 

3.3 如何調(diào)用這個(gè)API

  1. + (void)fetchUserInfoSuccess:(void (^)(void))success failure:(void (^)(NSError * error))failure { 
  2.     UserInfoApi *api = [[UserInfoApi alloc] init]; 
  3.     [api startWithCompletionBlockWithSuccess:^(__kindof YTKBaseRequest * _Nonnull request) { 
  4.         if (success) { } 
  5.     } failure:^(__kindof YTKBaseRequest * _Nonnull request) { 
  6.         if (failure) { } 
  7.     }]; 

3.4 添加請求頭

如果你需要添加請求頭的話,你可以實(shí)現(xiàn)下面這個(gè)方法。

  1. - (nullable NSDictionary<nsstring *, nsstring *> *)requestHeaderFieldValueDictionary { 
  2.     return @{@"token" : @""}; 
  3. }</nsstring *, nsstring *> 

以上,是兩種網(wǎng)絡(luò)請求方式(離散式、集約式)。

責(zé)任編輯:未麗燕 來源: 簡書
相關(guān)推薦

2017-04-21 16:00:09

2021-05-06 16:21:55

鴻蒙HarmonyOS應(yīng)用開發(fā)

2011-08-18 11:10:49

Core Plot框架IOS開發(fā)

2013-03-28 14:11:10

iOS異步GET方法請

2009-12-22 16:10:21

ADO.NET框架

2012-03-01 20:32:29

iOS

2017-03-23 14:18:30

LinuxShell命令

2022-10-13 19:14:17

Python網(wǎng)絡(luò)資源

2024-11-04 08:16:08

Go語言Web 框架

2015-07-13 16:56:40

IOS 9適配教程

2012-05-21 21:34:51

iOS

2010-05-10 14:55:35

網(wǎng)絡(luò)負(fù)載均衡

2021-01-08 09:07:19

Scrapy框架爬蟲

2021-11-09 09:43:52

鴻蒙HarmonyOS應(yīng)用

2021-03-02 16:25:52

微服務(wù)架構(gòu)技術(shù)

2011-08-03 14:33:54

IOS4.2 HTTP 請求

2016-03-18 09:36:13

ios基礎(chǔ)框架

2019-03-28 11:00:37

前端網(wǎng)絡(luò)請求開發(fā)

2015-06-02 09:51:40

iOS網(wǎng)絡(luò)請求封裝接口

2010-06-08 19:09:47

OpenSUSE網(wǎng)絡(luò)設(shè)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

九九在线精品视频| 欧美精选视频在线观看| 午夜精品久久久久久久| 久久久久高清| 国产乱码精品一区二区| 黄色免费成人| 原创国产精品91| 男人的天堂免费| 韩漫成人漫画| 一区二区三区中文字幕| 欧美一区二区三区在线免费观看 | 91精品国产综合久久福利| av之家在线观看| 免费a在线看| 91在线视频18| 亚洲最大的网站| 无码人妻av一区二区三区波多野| 99久久精品国产亚洲精品| 日韩精品免费视频| 一区二区三区人妻| 成人18视频在线观看| 天天综合网天天综合色| 法国空姐在线观看免费| 电影av一区| 97国产一区二区| 成人黄色片视频网站| 在线视频 中文字幕| 亚洲男女自偷自拍| 久久久久久国产| 国产3级在线观看| 国产91精品对白在线播放| 亚洲国产精彩中文乱码av| 久国产精品视频| 影音成人av| 色综合久久精品| 亚洲不卡中文字幕无码| 青春草免费在线视频| 中文字幕亚洲欧美在线不卡| 欧美一区二区在线视频观看| 亚洲av片在线观看| 丁香六月久久综合狠狠色| 成人信息集中地欧美| 中文字幕+乱码+中文字幕明步| 国产精品视频久久一区| 欧美精品videosex性欧美| 男女性高潮免费网站| 999国产精品永久免费视频app| 国产亚洲精品美女久久久久| 亚洲专区区免费| 美国十次av导航亚洲入口| 亚洲成人精品视频| 韩国三级hd两男一女| 欧美1区2区3| 日韩一区二区在线免费观看| 性久久久久久久久久久久久久| 日本一区二区三区中文字幕| 欧美日韩一本到| 伊人成人222| 欧美综合影院| 欧美一区三区四区| 中文字幕一二三| 精品嫩草影院| 日韩av影片在线观看| 中文字幕xxx| 精品一区二区三| 日韩一区在线视频| 精品爆乳一区二区三区无码av| 欧美日本国产| 91精品国产91久久久久| 欧美精品一二三四区| 日本女人一区二区三区| 成人情趣片在线观看免费| 国产精品欧美亚洲| 国产成人h网站| 国产精品一区二区a| 日本一级在线观看| 中文文精品字幕一区二区| 国产奶头好大揉着好爽视频| 国产精品蜜臀| 91国产免费观看| 色一情一区二区三区| 午夜精品在线| 亚洲天堂av高清| av最新在线观看| 99国产精品久久久久久久| 热久久这里只有| 91丨porny丨在线中文| 成人在线一区二区三区| 欧美日韩国产综合在线| 黄色免费在线看| 亚洲一区二区三区三| 人人爽人人av| 亚洲天堂av资源在线观看| 亚洲欧美日韩在线一区| 国精产品一区一区二区三区mba| 激情一区二区| 国产欧美久久久久久| 丰满人妻一区二区三区无码av| 2020国产精品久久精品美国| 日本黄色a视频| 日本蜜桃在线观看视频| 欧美精品一二三| 色噜噜在线观看| 91精品啪在线观看国产81旧版| 欧美一级视频在线观看| 国产免费av观看| 久久久www成人免费毛片麻豆| 男人j进女人j| 国产私拍福利精品视频二区| 亚洲电影免费观看高清完整版在线观看| 国产一级久久久久毛片精品| 黄色综合网站| 成人在线一区二区| 黄色免费在线播放| 亚洲成av人片观看| 日本黄色一级网站| 欧美一级精品| 欧日韩在线观看| 粉嫩av一区二区夜夜嗨| 综合久久久久久| 欧美精品成人网| 欧美交a欧美精品喷水| 欧美成人性色生活仑片| 一二三四区视频| 国产亚洲精品aa午夜观看| av免费观看大全| 99国产精品免费网站| 久久国产精品影片| 一级片在线观看视频| 欧美国产欧美综合| 欧美激情国产精品日韩| 牛牛精品成人免费视频| 久久久久国产一区二区三区| 国产免费av电影| 亚洲女同ⅹxx女同tv| 三上悠亚在线一区二区| 成人精品中文字幕| 国产不卡在线观看| 精品电影在线| 色狠狠桃花综合| 欧美多人猛交狂配| 久久精选视频| 日本在线观看一区| 日韩毛片在线| 中文字幕一区日韩电影| 一二区在线观看| 综合亚洲深深色噜噜狠狠网站| 91小视频在线播放| 自产国语精品视频| av成人在线电影| 国产福利在线免费观看| 亚洲成人久久久久| 久久艹免费视频| 久久精品男人天堂av| jizz欧美激情18| 欧美手机视频| 成人网欧美在线视频| 免费看a在线观看| 欧美一区二区三区四区五区 | 亚洲电影一级黄| 国产sm在线观看| 在线亚洲观看| 秋霞毛片久久久久久久久| 精品免费av在线| 日韩视频免费在线| 丰满肥臀噗嗤啊x99av| 午夜精品一区二区三区电影天堂 | 国产成人久久精品77777综合| 亚洲免费高清视频在线| 潘金莲一级淫片aaaaaaa| 精品69视频一区二区三区Q| 国产日韩一区二区三区| gay欧美网站| 日韩视频中文字幕| 成人黄色免费视频| 欧美午夜精品在线| 国产在视频线精品视频| 国产大陆精品国产| 青娱乐自拍偷拍| 日韩欧美1区| 99在线视频播放| 欧美xxxx做受欧美护士| 日韩有码在线电影| 人妻视频一区二区三区| 在线看国产一区二区| 91麻豆精品成人一区二区| 成人av网站免费| 一区二区三区国产免费| 午夜天堂精品久久久久| 蜜桃成人在线| 日韩区一区二| 国产成人jvid在线播放| 天堂av最新在线| 国产亚洲视频在线观看| 国产成人麻豆精品午夜在线| 精品久久香蕉国产线看观看gif| 日本 欧美 国产| 99国产精品久久久久久久久久 | 九一免费在线观看| 视频精品在线观看| 国产精品区二区三区日本| 日韩中文在线播放| 久久久爽爽爽美女图片| 免费在线一级视频| 欧美大片在线观看一区| 精品一区二三区| 五月天精品一区二区三区| 手机免费观看av| 99国产精品久久久久久久久久久 | 成人丝袜高跟foot| 8x8x成人免费视频| 视频一区二区三区中文字幕| 国产片侵犯亲女视频播放| 日韩欧美在线中字| 欧美日韩一区二区三区在线视频 | 亚洲深夜视频| 欧美日韩爱爱视频| 素人av在线| 国产性猛交xxxx免费看久久| 日本激情一区二区| 日韩亚洲欧美在线观看| 一级特黄aaa大片| 色av一区二区| 青青青国产在线| 精品动漫一区二区三区| 久久久美女视频| 亚洲色图第一区| 老司机福利在线观看| 国产亚洲一区二区三区四区 | 成人毛片免费看| 久久日韩精品| 欧美福利在线播放网址导航| av一本久道久久波多野结衣| 伊人久久大香线蕉综合影院首页| 国产精品女人久久久久久| 欧美一区 二区 三区| 欧美亚洲国产视频| 岛国av在线网站| 97人人模人人爽人人喊中文字| 里番在线播放| 久久久久久国产免费 | 国产成人综合一区二区三区| 日本不良网站在线观看| 欧美在线一区二区视频| 无遮挡爽大片在线观看视频| 136fldh精品导航福利| 欧美一级鲁丝片| 91成人福利在线| 都市激情综合| 国产精品69av| 国产精品天堂蜜av在线播放| 国产精品日韩欧美综合| 日韩电影精品| 92看片淫黄大片看国产片| 国产在线视频欧美一区| 99在线观看| 美女一区二区在线观看| 免费成人看片网址| 欧美丝袜激情| 亚洲精品偷拍视频| 亚洲一本视频| 日韩精品xxxx| 蜜桃av一区二区三区电影| 中文字幕第一页在线视频| 国产精品一区二区男女羞羞无遮挡| 波多野结衣中文字幕在线播放| 国产九九视频一区二区三区| 亚洲啪av永久无码精品放毛片| 成人免费视频播放| 3d动漫精品啪啪一区二区下载| 国产精品私房写真福利视频| 手机在线免费看片| 亚洲大片一区二区三区| 丁香社区五月天| 欧美日本一道本| 亚洲精品久久久久avwww潮水| 日韩毛片在线观看| 午夜激情在线观看| 久久久久免费精品国产| 免费欧美电影| 97神马电影| 欧美美乳视频| 日韩精品福利片午夜免费观看| 亚洲欧洲一区| 182午夜在线观看| 成人aa视频在线观看| 99精品欧美一区二区| 亚洲欧美电影院| av大全在线观看| 欧美日韩五月天| 欧美一级免费片| 自拍偷拍亚洲在线| 97超碰免费在线| 国产欧美精品va在线观看| 国产成人福利av| 伊人久久婷婷色综合98网| 亚洲国产精品一区| 色呦色呦色精品| 久久人人97超碰com| 午夜免费激情视频| 精品国产老师黑色丝袜高跟鞋| 91好色先生tv| 日韩久久午夜影院| 国产极品人妖在线观看| 成人精品一区二区三区电影黑人| 欧美重口另类| 免费一级淫片aaa片毛片a级| 麻豆极品一区二区三区| 国产福利短视频| 亚洲激情在线播放| 一本色道久久综合亚洲| 亚洲天堂男人的天堂| 国产传媒在线| 大波视频国产精品久久| 天天影视天天精品| 999在线免费视频| 99久久精品国产一区二区三区| 欧美色图亚洲视频| 欧美精选午夜久久久乱码6080| 韩国免费在线视频| 91极品女神在线| 国产成人高清精品免费5388| 女人床在线观看| 久久丁香综合五月国产三级网站| 亚洲AV无码片久久精品| 偷拍日韩校园综合在线| 亚洲欧美另类综合| 欧美日产国产成人免费图片| 国产精品va视频| 天天干天天操天天干天天操| 免费久久99精品国产| 亚洲一区 欧美| 欧美中文字幕一区二区三区| 黄色免费在线播放| 国产精品福利片| 国内精品久久久久久久影视简单| 黄色a级片免费| 久久免费国产精品| 青青视频在线免费观看| 国产偷亚洲偷欧美偷精品| 日韩欧美精品一区二区三区| 久久久久久高清| 亚洲欧美网站| 成人免费看aa片| 在线看国产一区二区| 超碰国产在线| 国产中文字幕亚洲| 希岛爱理av一区二区三区| 天堂av.com| 一区二区三区四区不卡视频| 亚洲国产www| 69av成年福利视频| 亚洲尤物av| 久热精品在线播放| 中文字幕亚洲一区二区av在线 | 日韩网红少妇无码视频香港| 亚洲国产精品yw在线观看| 在线天堂资源| 亚洲国产一区二区三区在线播 | 色美美综合视频| a天堂中文在线88| 亚洲va久久久噜噜噜| 国产精品hd| 18禁裸乳无遮挡啪啪无码免费| 91福利社在线观看| 国产精品刘玥久久一区| 99精品99久久久久久宅男| 日韩视频一区| 91精品国自产在线| 日韩欧美第一区| 丝袜老师在线| 在线观看日本一区| 福利一区在线观看| 高潮毛片又色又爽免费| 日韩中文字幕在线免费观看| 国产精品白丝一区二区三区| 国产真实乱子伦| 亚洲免费在线观看视频| 外国精品视频在线观看| 国产精品免费久久久| 欧美日本一区二区高清播放视频| 一区二区三区免费在线观看视频 | 精品免费在线| 色婷婷一区二区三区在线观看| 亚洲一本大道在线| 国产专区在线播放| 97视频资源在线观看| 久久一区中文字幕| 国产精品白嫩白嫩大学美女| 亚洲美女www午夜| 国产一区二区三区免费观看在线 | 日本一区二区三区视频在线| 国产激情片在线观看| 久久色在线视频| 性一交一乱一精一晶| 日韩美女在线观看| 黄色综合网站| 成人在线观看高清| 在线观看久久久久久| 老司机凹凸av亚洲导航|