AFNetworking有下载功能,但是下载功能比较基本,要实现复杂下载功能需要自己写一些代码。今天在github上找到了一个下载功能的开源项目,非常不错,链接如下:https://github.com/thibaultCha/TCBlobDownload。注意这个库经过测试,在ios8上有个bug,是它的多线程管理有问题,我把解决方法写在了github上。

无论是AFNetworking还是我提到的这个库,都利用了NSOperation,还利用了一个关键的函数NSURLConnection的 scheduleInRunLoop,这个函数的解释如下

Determines the run loop and mode that the connection uses to call methods on its delegate.

有了这个函数后,还需要确定一个runloop,这个runloop是负责网络工作线程的runloop,当把connection放到这样的runloop中后,网络数据返回时,就会在网络线程中执行代码,

当把connection加入到运行operation的queue后,运行operation的线程就不会在发起请求后立即结束,而是会等待回调函数的调用,这就达到了在异步线程中发送并且接受网络数据的要求。如果使用Operation机能的同时,仅仅使用普通的connection的start方法,那么只用链接请求的发出是异步的,而他的回调方法依旧会在主线程中执行,而且无法通过限制OperationQueue的并发数来限制请求数量,因为那样仅仅能保证同时发出请求的并发数,发出请求后,没有等待回调,线程就结束了,又可以发出新的请求,这样的话往往所有的请求很快都发出了,不满足要求。

iOS 推荐一个下载用的第三方库的更多相关文章

  1. IOS数据持久化存储之SQLite3第三方库FMDB的使用

    SQLite是一种小型的轻量级的关系型数据库,在移动设备上使用是非常好的选择,无论是Android还是IOS,都内置了SQLite数据库,现在的版本都是SQLite3.在IOS中使用SQLite如果使 ...

  2. 最全面的iOS和Mac开源项目和第三方库汇总

    标签: UI 下拉刷新 EGOTableViewPullRefresh – 最早的下拉刷新控件. SVPullToRefresh – 下拉刷新控件. MJRefresh – 仅需一行代码就可以为UIT ...

  3. ios显示一个下载banner

    <meta name="apple-itunes-app" content="app-id=432274380" /> 这个标签是告诉iphone的 ...

  4. ios开发经常使用到的第三方库

    由于iOS SDK相对照较底层,所以开发人员就得受累多做一些体力活.只是幸运的是,有非常多第三方的类库能够用来简化非常多不必要的工作.经过作者团队的谨慎讨论.他们 评选出了10款可以极大提高iOS开发 ...

  5. ios开源项目(各种有用的第三方库)

    状态栏:MTStatusBarOverlay  下拉刷新:EGOTableViewPullRefresh  网络应用:ASIHTTPRequest  等待特效:MBProgressHUD  JSON解 ...

  6. 推荐一个我写的Python库——PyNAS

    介绍 PyNAS是一个以Python的Updog的库为基础,制作而来的库 安装 pip安装(推荐) pip install PyNAS 源码安装(推荐) Github: git clone https ...

  7. 【iOS】Xcode 使用 CocoaPods 导入第三方库后没有提示

    Github 上下载的开源项目,运行后出现的 [iOS]build diff: /../Podfile.lock: No such file or directory 解决后,又出现了这个问题. 解决 ...

  8. 推荐一个Android开发懒人库 -- ButterKnife

    ButterKnife -- 项目地址:https://github.com/JakeWharton/butterknife 都说程序员都是比较懒的,什么事情都想着让程序自动化帮忙减轻工作量,这个开源 ...

  9. 【转】IOS学习笔记29—提示框第三方库之MBProgressHUD

    原文网址:http://blog.csdn.net/ryantang03/article/details/7877120 MBProgressHUD是一个开源项目,实现了很多种样式的提示框,使用上简单 ...

随机推荐

  1. Java原来如此-遍历Map的三种方法

    import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; pub ...

  2. Java编程思想学习(十三) java I/O

    Java中使用流来处理程序的输入和输出操作,流是一个抽象的概念,封装了程序数据于输入输出设备交换的底层细节.JavaIO中又将流分为字节流和字符流,字节流主要用于处理诸如图像,音频视频等二进制格式数据 ...

  3. vim YouCompleteMe

    http://www.ithao123.cn/content-1906969.html http://www.it165.net/os/html/201503/12190.html

  4. POJ3070Fibonacci(矩阵快速幂+高效)

    Fibonacci Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11587   Accepted: 8229 Descri ...

  5. 高速公路(Highway,ACM/ICPC SEERC 2005,UVa1615)

    I think: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <m ...

  6. 锋利的jQuery-4--trigger()和triggerHandler()

    trigger()方法触发事件后,会执行浏览器默认操作. $("input").trigger("focus") 以上的代码不仅会执行input绑定的focus ...

  7. web后门排查与高效分析web日志技巧

    今年一直大大小小的事情忙,很少有时间能静下心写个文章,所以最近博客更新也越来越少了,公司现在安全团队在我这边,一直在玩命的招人.下个月8号有一个互联网金融的会,4月在qcon北京站,都以嘉宾的身份去分 ...

  8. C# ManualResetEvent的使用

    using System; using System.Threading; public class Example { // mre is used to block and release thr ...

  9. AppCompat学习(1)-AppCompatSpinner

    andriod中的spinner控件一共有两个,一个是本身的Spinner,一个是android.support.v7.widget.AppCompatSpinner. 两者的区别在于v7内的Spin ...

  10. Usermod 命令详解 ------工作中修改shell时用 usermod -s /bin/csh home

     Usermod 命令详解 2012-09-11 11:01:36 标签:usermod 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.htt ...