我的应用程序与 CoreFoundation 库交互。另一个库的一些函数返回一个核心基础对象,我需要识别对象的种类才能处理数据。现在,查看 CFType 库参考,Apple 清楚地声明了以下内容:“因为类型 ID 的值可以随着版本的不同而变化,所以你的代码不应该依赖存储或硬编码的类型 ID,也不应该硬编码任何观察到类型 ID 的属性(例如,它是一个小整数)。”
基于此,我必须避免任何枚举(CFArray = 18, CFBoolean = 21
等等)。唯一应该起作用并且不受新版本更改影响的是:
int ID = CFGetTypeID(obj);
if ID = CFBooleanGetTypeID()
然后……
if ID = CFStringGetTypeID()
然后……
if ID = CFDataGetTypeID()
然后……等等……
这真的是一件很可怕的事情。很多调用只是为了识别一个对象。
Apple 还建议不要对从 CFCopyTypeIDDescription 返回的信息的内容或格式创建依赖关系,因此我也必须排除此选项。
任何人都知道我如何轻松识别返回的核心基础类型以及为什么 Apple 总是试图用新版本破坏现有代码?