玩转iOS开发:NSURLSession讲解(三)
文章分享至我的個人技術(shù)博客: https://cainluo.github.io/14986211698053.html
前言
雖然前面兩講都是說了NSURLSession的一些理論上的知識, 但我們現(xiàn)在起碼對NSURLSession有個大概的了解, 并不會像一開始的那樣, 一臉懵逼的看著, 這個請求是什么鬼, 那個方法是什么鬼, Task是什么東西, 如果沒有去看的朋友們可以去看看前面兩講玩轉(zhuǎn)iOS開發(fā):NSURLSession講解(一)和 玩轉(zhuǎn)iOS開發(fā):NSURLSession講解(二), 大神就隨意啦.
這里的工程是仿照RayWenderlich(需要翻墻)的一篇文章URLSession Tutorial: Getting Started, 喜歡看原文或者是Swift的朋友也可以去看看, 我這個是Objective-C版本的.
注意: 本工程是在Xcode 9 beta 2, iOS 11的環(huán)境下運行的.
搭建界面
這里我要說明一下, 原文里的界面是使用Storyboard來搭建的, 我這里是使用代碼和Masonry, 這里再次和大神表示感謝.
搭建好的界面也很簡單, 就一個UITableView, UITableViewCell和UISearchBar, 就完事了, 布局的代碼都在項目里, 由于個人沒有什么藝術(shù)細(xì)胞, 所以界面略丑, 大家湊合著看吧.
項目架構(gòu)
為了讓大家閱讀起來比較方便和清晰, 我這里用了我一向習(xí)慣的MVVM架構(gòu)模式, 雖然文件多了點, 但每個文件的代碼都保證在了200行之內(nèi), 個人感覺看起來還是比較舒服的.
實現(xiàn)下載
在項目里面有一個QueryService和一個DownloadService, 都是負(fù)責(zé)管理下載和一些網(wǎng)絡(luò)請求, 由于代碼太多了, 這里我就講講思路好了.
QueryService: 負(fù)責(zé)實現(xiàn)用UISearchBar的搜索網(wǎng)絡(luò)請求, 當(dāng)UISearchBar輸入關(guān)鍵字的時候, 通過指定的URL和Query拼接成一條有效的搜索鏈接, 并且通過NSURLSessionDataTask進行網(wǎng)絡(luò)請求, 成功后會進行數(shù)據(jù)的解析, 并且通過SearchModel進行組裝, 然后添加到一個NSMutableArray對象里, 最后UITableView會通過這個NSMutableArray作為數(shù)據(jù)源來刷新整個UITableView.
DownloadService: 負(fù)責(zé)實現(xiàn)UITableViewCell通過DownloadModel點擊開始下載, 暫停, 恢復(fù)下載, 取消下載等等操作.
當(dāng)然這里我們還需要實現(xiàn)一個叫做NSURLSessionDownloadDelegate和 NSURLSessionDelegate兩個協(xié)議, 分別實現(xiàn):
// 下載完成后的操作方法 - (void)URLSession:(NSURLSession *)sessiondownloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location;// 正在下載時的操作方法 - (void)URLSession:(NSURLSession *)sessiondownloadTask:(NSURLSessionDownloadTask *)downloadTaskdidWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite;// 后臺下載完成后的方法 - (void)URLSessionDidFinishEventsForBackgroundURLSession:(NSURLSession *)session; 復(fù)制代碼這里面的實現(xiàn)可以去SearchSessionDelegate里面看看, 這里就不詳細(xì)多說了.
整個項目的核心內(nèi)容就在這里了, 更詳細(xì)的細(xì)節(jié), 大家可以去項目里自己看看哈, 這里就不浪費大家的時間了.
最終的效果:
總結(jié)
最后嘮叨兩句, 由于我這個只是Demo, 里面存在的Bug, 還有不完善的封裝請大家多多見諒, 這里順便推兩個優(yōu)秀的開源下載管理器HWIFileDownload, TCBlobDownload.
如果有童鞋想自己封裝一個的話, 也可以去看看這幾篇文章MCDownloadManager ios文件下載管理器, 手把手教你封裝下載管理器, 還有這個經(jīng)驗貼iOS通用下載管理器-HJMURLDownloader.
祝大家學(xué)習(xí)愉快.
工程地址:
項目地址: https://github.com/CainRun/iOS-NetWork/tree/master/NSURLSession講解(三)
最后
碼字很費腦, 看官賞點飯錢可好總結(jié)
以上是生活随笔為你收集整理的玩转iOS开发:NSURLSession讲解(三)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python人脸识别系统界面_人脸识别演
- 下一篇: 寻找白板上的便签条