我有一个应用内下载的应用。我以这种方式成功下载了mp3文件:
NSData *data1 = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://.../somefile.mp3"]];
[data1 writeToFile:filePath atomically:YES];
但是这段代码执行时确实有很大的停顿。如何计算下载进度并使用进度条显示它?
答案 0 :(得分:4)
问题是dataWithContentsOfURL:
是阻止呼叫。这意味着它将阻止它正在运行的线程。
你有几个方法可以解决这个问题,而更好的选择可能是使用NSURLConnection
。
使用NSURLConnection
,您可以异步执行下载请求,这将阻止它阻止主线程。
您必须使用NSURLConnectionDelegate
方法了解下载进度,保存数据以及获知成功或失败。
请阅读NSURL Loading System的文档。
使用NSURLConnection
的另一种方法是使用调度队列包含对GCD的一些调用来包装当前代码。这样可以阻止来电阻止您的用户界面,但不会让您确定进度 - 因此您仍然需要使用NSURLConnection
。
答案 1 :(得分:1)
您应该真正了解ASIHTTPRequest,尤其是this section
它提供回调来跟踪您的下载,异步和同步连接,队列,缓存和许多好东西。