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