我有一个可进行应用内下载的应用程序。我通过以下方式成功下载了mp3文件:
NSData *data1 = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://.../somefile.mp3"]];
[data1 writeToFile:filePath atomically:YES];
但是在执行这段代码时确实有很大的停顿。如何计算下载进度并用进度条显示?
问题是dataWithContentsOfURL:
是一个阻塞调用。这意味着它将阻塞正在运行的线程。
您有几个选项可以解决此问题,更好的一个可能是使用NSURLConnection
.
With an NSURLConnection
您可以异步执行下载请求,这将防止它阻塞主线程。
您必须使用NSURLConnectionDelegate
通知下载进度、保存数据以及通知成功或失败的方法。
请阅读相关文档NSURL加载系统 https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/URLLoadingSystem/Tasks/UsingNSURLConnection.html.
使用的替代方法NSURLConnection
是使用调度队列通过对 GCD 的一些调用来包装当前的代码。这将防止调用阻塞您的 UI,但它不允许您确定进度 - 为此您仍然需要使用NSURLConnection
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)