【问题标题】:CFArrayGetValueAtIndex: How to determine if return value is a CFType or notCFArrayGetValueAtIndex:如何判断返回值是否为 CFType
【发布时间】:2012-09-05 15:18:04
【问题描述】:

这是来自 Apple Developers 网站:

const void * CFArrayGetValueAtIndex ( CFArrayRef theArray, CFIndex idx );

返回值
theArray 中 idx 索引处的值。如果返回值为 Core Foundation 对象,则所有权遵循 Core Foundation 内存管理编程指南中的“获取规则”。

现在,如何测试返回值是否为 CFType?

编辑:

刚刚在 /usr/lib/system/libsystem_c.dylib 中找到了一个名为 __isctype 的函数,它完全符合我的要求。有人知道这个功能吗?

【问题讨论】:

  • __isctype() 与 CFTypes 无关。它用于确定字符的“类别”(即它是数字还是字母等)。它也是一个私有函数。
  • 对我来说多么尴尬。我的工作时间太长了……当然,C 中没有 RTTI 功能。

标签: core-foundation


【解决方案1】:

简而言之,您应该始终了解提供给您的对象系列。

如果它不是与 CF 兼容的类型(包括 NSObjects),那么您应该通过显式文档知道。要么您构造了一个非常不寻常的 CFArray,要么客户端会指出这一点(例如,通过指定数组包含指向某个结构的指针)。这是一个安全的默认假设,并且在其 CFArray 中不返回与 CF 兼容的对象的每个调用都应使其响亮而清晰。

如果有疑问,您总是可以在开发过程中 CFRetainCFRelease 返回对象(如果它不是 CF 类型,则应该崩溃)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-20
    • 2018-08-27
    • 1970-01-01
    • 2012-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多