试图理解CFTree文档

时间:2013-12-30 14:35:45

标签: ios objective-c data-structures core-foundation

我正在尝试创建一个将字符串保存为节点的CFTree。我无法理解课程的文档。这是链接:https://developer.apple.com/library/mac/documentation/corefoundation/Reference/CFTreeRef/Reference/reference.html#//apple_ref/c/func/CFTreeSetContext

创建CFTree时,调用CFTreeCreate并传入分配器和上下文。我理解的allocator参数,但我不理解context参数。

以下是在将上下文传递给CFTreeCreate之前需要在上下文中填写的字段:

version - 我理解这一点,我只是将其版本为0

info - 我会将其设置为NSString吗?这不是不行,因为我需要使用__bridge或其他什么?我对这一个感到困惑

retain - 即使这是Core Foundation课程,ARC是否会保留?我不知道该把什么放在这里

release - 与上述相同

copyDescription - 不确定这个领域的重点是什么,或者我是否需要它以实现我的目标。

1 个答案:

答案 0 :(得分:1)

  

我只是将它设置为NSString吗?这不是不行,因为我需要使用__bridge或其他东西吗?

如果你想这样做,你将不得不做一个非保留的桥接演员。由于NSStringCFStringRef免费联网,因此在树中,您可以将NString视为CFStringRef,并将保留和释放功能设置为CFRetainCFRelease分别 - 我认为应该没问题,原型看起来兼容。

  

即使这是Core Foundation课程,ARC是否会保留?

不,它没有,但如果您按照我的建议设置保留和释放功能,那么您应该没问题。

  

copyDescription - 不确定这个字段的重点是什么,或者我是否需要它以便我正在尝试做什么

它只是按照-description对Cocoa对象所做的那样吐出描述。您可以将其保留为null,但如果您的信息为NSString,则可以执行以下操作:

CFStringRef* copyDescription(void* info)
{
    return CFStringCreateCopy(someAllocator, (CFStringRef) info);
}

我没有尝试过,所以它可能无效。