即使CFNetwork被弃用,CFNetwork仍然通过CFStreamErrors?

时间:2010-02-12 20:44:00

标签: objective-c error-handling core-foundation deprecated cfnetwork

我正在编写一些代码,其中包含一些CFNetwork内容,以便在Objective-C中进行DNS解析。

一切都很好而且有效,但我有几个问题:

CFHost的异步解析的回调函数原型正在传递对CFStreamError结构的引用,即使文档中说CFStreamError已弃用且应使用CFReadStreamCopyError,这将返回CFError结构。

回调函数声明如下:

typedef void (CFHostClientCallBack) (
    CFHostRef theHost,
    CFHostInfoType typeInfo,
    const CFStreamError *error,
    void *info);

似乎没有任何替代此回调使用非弃用API。

我认为贬低API的重点是引入了新的替代旧版本的API?如果这是真的,那么为什么没有使用CFReadStreamCopyError函数的替代回调呢?

我遇到CFStreamErrors的主要问题实际上是不明白的...我有什么办法可以将CFStreamError变成CFError吗?


只是澄清几点:

我不相信我在这一点上误读了文档。 CFHosts异步解析系统中使用的回调方法传递CFStreamError。虽然CFStreamError本身可能不被弃用,但不推荐使用返回它们的函数,即CFReadStreamGetErrorCFWriteStreamGetError。文档建议使用CFReadStreamCopyErrorCFWriteStreamCopyError返回CFError而不是CFStreamError

我在Objective-C中包装此代码,并且我正在大量使用Foundation对象。因此,CFError对我来说比CFStreamError更有用,因为它与NSErrorCFStreamErrors的免费桥接不包含与... CFError几乎一样多的有用信息。一个CFStream。此外,我甚至没有直接处理NSError,为什么我必须处理它的特定错误结构?最后,我想最终在我的包装器类中的委托调用中返回{{1}}。

此外,我知道弃用并不意味着该方法已经消失,但如果某些内容被标记为已弃用,那么(至少对我而言)提供替代方案是有意义的。否则,不推荐使用已弃用的方法/函数/类等,并且在取代它之前弃用它是没有意义的吗?

2 个答案:

答案 0 :(得分:0)

弃用意味着计划过时。这适用于Apple的软件工程师以及第三方软件开发人员。

另外,您误读了文档。该结构由函数 CFReadStreamGetError返回。该文档建议使用新的API函数,而不是使用新的错误结构。

答案 1 :(得分:0)

CFStreamError结构实际上并未弃用。从文档中看,它似乎将在下一个版本中(因为它们不推荐使用返回它的方法)。但是现在,看起来您仍然需要处理结构本身,因为没有替换回调。

我意识到这不是您正在寻找的答案类型,但CFStreamError实际上尚未完全弃用,因此您不会替换它的所有用途。