1

几个月前,我参加了 iPhone 开发者技术讲座,向其中一位大师询问了 iPhone 上缺少 NSHost 的问题。我移植到 iPhone 的一些代码在其整个网络代码中大量使用了 NSHost。

有人告诉我 NSHost 在 iPhone 上,但它是私有的。我还被告知 NSHost 是一个同步 API,无论如何我都不应该使用它。(如果有人能详细说明为什么不应该使用它,作为奖励,那就太好了。)

我可以看到在主线程上使用同步 API 的注意事项,因为它们会阻塞直到完成 - 这对网络代码来说从来都不是一件好事,因为有很多因素可能导致 API 大量阻塞线程的时间。

我的解决方案是围绕 CFHost 的异步解析函数编写一个包装器。

结果效果很好,我正在考虑将其发布到公共领域。

但我的问题是这样的:假设我的应用程序在连接阶段每次运行只解析一次主机名,然后在会话的其余部分缓存它。在解决期间,会显示一个模式屏幕,告诉用户“正在连接”一个漂亮的微调器。

分辨率是否异步真的很重要吗?无论如何,用户必须等待连接,并且仅在第一次连接时完成解析。后续连接使用解析的缓存结果。

什么时候可以同步,什么时候应该异步?

4

1 回答 1

2

你漂亮的微调器不会旋转,因为在同步调用期间 UI 也会被阻塞。当然,您可以在单独的线程上进行调用,但是您所做的事情与异步调用基本相同。

于 2010-03-14T16:22:21.947 回答