启动应用程序时dataWithContentsOfURL是否有问题?

Yep*_*Yep 5 multithreading objective-c grand-central-dispatch

我创建了一个应用程序,可以在第一次启动时访问某些数据,然后显示它.我一直在这样下载这些数据:

NSData *data = [NSData dataWithContentsOfURL:url];
Run Code Online (Sandbox Code Playgroud)

这不好吗?现在我已经将包含它的方法设置为使用GCD在后台线程中运行,但我听说由于dataWithContentsOfURL是同步的,所以很糟糕.对此有何意见?

bry*_*mac 5

如果你在主UI线程上运行它会很糟糕.这将阻止您的应用程序的响应性,这是不好的,但它在启动时更糟糕.

你需要让它异步.您可以通过在后台线程(GCD dispatch_async)上运行该方法或使用NSUrlConnection的异步方法来实现.

这是一个使用GCD在后台工作,然后在主线程上更新UI(完成后)的示例:

GCD,线程,程序流和UI更新

另一种选择是NSUrlConnection的异步方法.请在此处查看initWithRequest方法:

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSURLConnection_Class/Reference/Reference.html