我创建了一个应用程序,可以在第一次启动时访问某些数据,然后显示它。我一直在这样下载这些数据:
NSData *data = [NSData dataWithContentsOfURL:url];
这不好吗?现在我已经设置了包含它的方法在后台线程中使用GCD运行,但是我听说由于dataWithContentsOfURL
是同步的,所以它很糟糕。对此有何意见?
答案 0 :(得分:5)
如果在主UI线程上运行它会很糟糕。这将阻止你的应用程序的响应能力,这很糟糕,但在启动时更糟糕。
你需要让它异步。您可以通过在后台线程(GCD dispatch_async)上运行该方法或使用NSUrlConnection的异步方法来实现此目的。
以下是使用GCD在后台工作,然后在主线程上更新UI(完成后)的示例:
GCD, Threads, Program Flow and UI Updating
另一个选项是NSUrlConnection的异步方法。请参阅此处的initWithRequest方法:
答案 1 :(得分:3)
只要你在后台线程中运行它就是安全的 同步加载错误的想法仅对主UI线程有效。主UI线程上的长时间运行操作将使您的应用无响应。在后台执行此操作是正确的方法。另外,请考虑使用:
+dataWithContentsOfURL:options:error:
如果出现任何问题,您可以收到错误。