gpt4 book ai didi

objective-c - 如果 Apple 建议不要对类型 ID 进行硬编码,如何识别 Core Foundation 对象?

转载 作者:行者123 更新时间:2023-12-03 16:32:39 24 4
gpt4 key购买 nike

我的应用程序与 CoreFoundation 库交互。另一个库的某些函数返回一个核心基础对象,我需要识别对象的类型才能处理数据。现在,查看 CFType 库引用,Apple 明确指出了以下内容:“由于类型 ID 的值可能会因版本而异,因此您的代码不应依赖于存储或硬编码的类型 ID,也不应对类型 ID 的任何观察到的属性进行硬编码(例如,它是一个小整数)。”

基于此,我必须避免任何枚举(CFArray = 18、CFBoolean = 21 等)。唯一应该有效并且不受新版本变化影响的事情是这样的:

int ID = CFGetTypeID(obj);如果 ID = CFBooleanGetTypeID() 那么...如果 ID = CFStringGetTypeID() 那么...如果 ID = CFDataGetTypeID() 那么..等等...

这真是一件可怕的事情。大量调用只是为了识别一个对象。

Apple 还建议不要对从 CFCopyTypeIDDescription 返回的信息的内容或格式创建依赖关系,因此我也必须排除此选项。

有人知道我如何轻松识别返回的核心基础类型以及为什么 Apple 总是尝试在新版本中破坏现有代码吗?

最佳答案

不幸的是,如果您不想冒着应用程序因 future 操作系统更新而崩溃的风险,则必须进行比较:

if( CFGetTypeID(myUnknownCFObject) == CFArrayGetTypeID() ) {
// handle the object as a CFArray
} else if( /* ... etc. ... */ ) {
} else {
// we don't know how to deal with this object
}

关于objective-c - 如果 Apple 建议不要对类型 ID 进行硬编码,如何识别 Core Foundation 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10231619/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com