记一次下载文件实现思路

需求:
有多个课堂,每个课堂里面对应多个课程,每个课程以多个文件(mp4,图片等)形式存在;并且课堂对应下载的位置也必须在对应的课堂下面;每个课程对应的按钮都可以点击下载,暂停
记一次下载文件实现思路_第1张图片

想法:

如果每个课程是一个zip 下载链接的话,这样就方便多了,把多个课程的operation 放入到NSOperationQueue里面,安装队列下载,串行 这样简单的就实现了多线程下载;

思考1

每个课程有多个下载链接,把每个课程的多个链接operation放入对应的NSOperationQueue中,然后再把NSOperationQueue 组合成一个数组操作,按照先后顺序下载,这个就牵扯到NSOperationQueue下载顺序的问题,如果暂停的话NSOperationQueue就全部取消,并且如果每个课程下载一个链接的话,判断这个也是比较麻烦的,各种判断,排列;

思考2

不用NSOperationQueue队列下载,只用一个下载的operation实现,定义一个数组,存放下载的list,点击一个按钮,添加一个课程的字典NSDictionary,暂停或者取消下载,就移除一个课程的NSDictionary;对于每个课程的NSDictionary 里面存放的是课程ID 和对应的下载arry,

实现方法:点击下载,增加一个NSDictionary到downlist 这个downlist 必须是全局的,然后开始下载,注意:这快下载的的url总是取arry第一个[0],然后下载成功后,移除掉arry 里面的一条数据,然后又开始走下载方法,继续上面的循环,直到对应的NSDictionary里的arry 为0 的时候,再移除downlist 的对应的NSDictionary,然后就是上面的循环,保证每次都下载一个url,对于点击取消下载按钮,判断方法是移除对应list里面的字典,(这里面的字典如果有下载的话,只能取消的,但是已经下载的不会影响);对于点击进去也没判断这个课程是否全部下载的icon 显示,可以根据字典里面的dic 是否还有来判断,这个数据是根据下载成功,发送一个通知NSNotificationCenter,把对应页面的数据发送过去,然后再relaod tableview 数据,获取最新的下载状态;

以上就是简单实现下载的方法,以后如果发现更好的方法,继续更新

(上面的下载没有考虑断点续传功能,这个也需要以后更新,等完善的话,再把代码放出来,现在代码太烂了,还需优化)

你可能感兴趣的:(多线程,图片)