玩转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讲解(三)相关推荐
- 玩转iOS开发:iOS 11 新特性《UIKit新特性的基本认识》
文章分享至我的个人技术博客: https://cainluo.github.io/15099354591154.html 前两篇, 我们讲了Xcode 9的一些新特性, 可以更加方便我们去写" ...
- Adroid游戏开发实例讲解(三)-小蝌蚪找妈妈附源码
Adroid游戏开发实例讲解(三)-小蝌蚪找妈妈附源码 程序之美 从小就听着小蝌蚪找妈妈的故事长大,我相信小伙伴们一定都不陌生,因为小学课本中,我们早早的就学过了小蝌蚪找妈妈这篇文章,它既是一篇文章, ...
- iOS开发备战金三银四·头条三面记录
一面 一.自我介绍 简单介绍一下你自己吧 解析:简单介绍下自己的名字,教育背景,现在的工作,做过的项目 二.自我介绍衍生的口头问题 讲讲下你在你项目中做过的优化或者技术难点 解析:介绍了自己封装的一个 ...
- 玩转 iOS 开发:集成 AliPay - 支付宝
文章转至: https://cainluo.github.io/14739456388212.html 作者感言 前面我已经写了一篇关于**WeChat SDK的支付篇, 那我们继续研究接下来的支付S ...
- 玩转iOS开发:5.《Core Animation》CALayer的Transforms
文章转至我的个人博客: https://cainluo.github.io/14777052484078.html 作者感言 之前我们所了解的CALayer都是比较抽象化, 好在<Core An ...
- 玩转iOS开发:iOS 10 新特性《Siri Kit》
文章分享至我的个人技术博客: https://cainluo.github.io/14977885999456.html Siri 众所周知Siri是苹果爸爸内置在iOS系统的一个语音助手, 自从在2 ...
- 玩转iOS开发:《iOS设计模式 — 单例模式》
作者感言 有一段时间没有发博客了, 刚好现在忙完项目的需求, 现在可以闲下来写写博客, 顺便自己给自己复习巩固一下知识, 不过我在这里又要吐槽一句, 项目中遇到了一个单例的问题, 让我感到非常的蛋疼, ...
- 玩转iOS开发:iOS 8 新特性《UIVisualEffect》
文章转至: https://cainluo.github.io/14730058185822.html 作者感言 在iOS 8发布的时候, Apple介绍了很多iOS 8的新特性, 比如什么Exten ...
- 玩转iOS开发:iOS 10 新特性《Thread Sanitizer》
文章分享至我的个人技术博客: https://cainluo.github.io/14971830645415.html Thread Sanitizer(TSan) Thread Sanitizer ...
最新文章
- API 面试四连杀:接口如何设计?安全如何保证?签名如何实现?防重如何实现?...
- JQuery 模糊匹配
- c语言课设报告河海大学,2020河海大学计算机学硕838经验贴
- 《疯狂Java讲义》7
- 关于word中公式和图片对齐的简易设置
- 成都东软学院计算机科学与技术系,成都东软学院计算机科学与技术系毕业设计(论文)工作实施细则成都东软学院计算机科学与技术系毕业设计(论文)工作实施细则.doc...
- ic designer
- linux加载内核后如何运行app,Android app启动过程
- mysql版本不同会导致语法错误码_神奇的 SQL,Group By 真扎心,原来是这样!
- python3-Anaconda3 基本使用
- 【2016年第2期】专题导读:大数据与社会治理
- Flink java.lang.NoClassDefFoundError: org/apache/flink/api/common/functions/FlatMapFunction
- bootstrap table通过ajax获取后台数据展示在table
- vue项目部署iis后 乱码_vue项目的自动化部署
- .net 根据银行卡获取银行信息
- VB.net小技巧——VB中调用matlab
- 没有超级英雄?自己做一个java漫威英雄手办商城系统
- 虚幻引擎图文笔记:The emitter is GPU but the fixed bounds checkbox is not set警告的解决
- 银行大数据应用案例(研讨会整理)
- 解析XML文件(字符串)的两种方法-----SAXReader 与 DocumentHelper
热门文章
- delphi 企业微信消息机器人_企业微信—群聊机器人
- Unity 2017 Game Optimization 读书笔记(2)Scripting Strategies Part 2
- scipy.ndimage.zoom上采样与下采样
- 深度学习鼻祖杰夫·辛顿及巨头们的人才抢夺战
- 2019春季学期第四周作业
- 在Winform中菜单动态添加“最近使用文件”
- 【FBI WARNING】一些Noip的黑科技 持续整理!
- Entity Framework With Oracle
- [Buzz Today]2012.08.08
- Dreamweaver使用详解