下载时进度条
我有一个在应用程序下载的应用程序。 我用这种方式成功下载了mp3文件:
NSData *data1 = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://.../somefile.mp3"]]; [data1 writeToFile:filePath atomically:YES];
但是这段代码执行的时候会有很大的停顿。 如何计算下载的进度并显示进度条?
问题是dataWithContentsOfURL:
是一个阻塞调用。 这意味着它会阻塞正在运行的线程。
你有几个选项来解决这个问题,更好的可能是使用NSURLConnection
。
使用NSURLConnection
可以asynchronous执行下载请求,这将防止它阻塞主线程。
您必须使用NSURLConnectionDelegate
方法来通知下载进度,保存其数据,并通知成功或失败。
请阅读NSURL加载系统的文档。
使用NSURLConnection
的替代方法是使用调度队列对GCD进行一些调用来包装当前代码。 这将阻止调用阻止您的用户界面,但它不会允许您确定进度 – 因为您仍然需要使用NSURLConnection
。
你应该看看ASIHTTPRequest ,特别是这一节
它提供了跟踪你的下载,asynchronous和同步连接,队列,caching和许多好东西的callback。