0

我正在写一些代码来结束一些CFNetwork东西以在 Objective-C 中进行 DNS 解析。

一切都很好,它正在工作,但我有几个问题:

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

回调函数声明如下:

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

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

我认为弃用 API 的目的是引入新的 API 来取代旧的 API?如果这是真的,为什么没有使用该CFReadStreamCopyError函数的替代回调呢?

我遇到的主要问题CFStreamErrors真的很不起眼......我能做些什么来把 aCFStreamError变成 aCFError吗?


只是为了澄清几点:

我不相信我误读了关于这一点的文档。CFHosts 异步解析系统中使用的回调方法传入一个CFStreamError. 虽然CFStreamError它本身可能不会被弃用,但返回它们的函数,即CFReadStreamGetErrorCFWriteStreamGetError被弃用。文档建议使用CFReadStreamCopyErrorand CFWriteStreamCopyErrorwhich returnCFError而不是CFStreamError.

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

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

4

2 回答 2

0

CFStreamError结构实际​​上并未被弃用。从文档来看,它看起来会在下一个版本中出现(因为他们正在弃用返回它的方法)。然而,目前看来,您仍然需要处理结构本身,因为没有进行替换回调。

我意识到这不是您正在寻找的答案类型,但CFStreamError实际上还没有完全弃用,所以您不会有替代它的所有用途。

于 2010-02-18T19:23:05.510 回答
0

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

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

于 2010-02-16T16:15:08.107 回答