2010-02-15 58 views
1

几个月前我参加了iPhone开发者技术讲座,并向其中的一位大师询问了iPhone上缺少NSHost的情况。我向iPhone移植的一些代码在其网络代码中大量使用了NSHost。CFHost DNS解析 - 什么时候可以使用同步API?

我被告知,NSHost是在iPhone上,但它的私人。我还被告知NSHost是一个同步API,我不应该使用它。 (如果有人可以详细说明为什么它不应该使用,作为奖励,这将是伟大的。)

我可以看到在主线程上使用同步API的警告,他们将阻塞,直到完成 - 这对于网络代码来说绝对不是好事,因为有太多因素可能导致API在相当长的时间内阻塞线程。

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

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

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

分辨率是不是异步?用户必须等待连接,并且解析仅在第一个连接上完成。后续连接使用解析的缓存结果。

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

回答

2

你的漂亮微调不会旋转,因为在同步调用期间UI也会被阻塞。当然,你可以在一个单独的线程上进行调用,但是这样做基本上和异步调用一样。

+0

我不确定UIActivityIndi​​cator是什么,但它似乎保持动画(旋转),即使主线程被阻塞,这很奇怪。我只能想象UIActivityIndi​​catorClass在另一个线程上的动画吗?奇怪。 – Jasarien 2010-03-14 20:37:55