我正在尝试创建一个将字符串保存为节点的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
- 不确定这个领域的重点是什么,或者我是否需要它以实现我的目标。
答案 0 :(得分:1)
我只是将它设置为NSString吗?这不是不行,因为我需要使用__bridge或其他东西吗?
如果你想这样做,你将不得不做一个非保留的桥接演员。由于NSString
与CFStringRef
免费联网,因此在树中,您可以将NString
视为CFStringRef
,并将保留和释放功能设置为CFRetain
和CFRelease
分别 - 我认为应该没问题,原型看起来兼容。
即使这是Core Foundation课程,ARC是否会保留?
不,它没有,但如果您按照我的建议设置保留和释放功能,那么您应该没问题。
copyDescription - 不确定这个字段的重点是什么,或者我是否需要它以便我正在尝试做什么
它只是按照-description
对Cocoa对象所做的那样吐出描述。您可以将其保留为null,但如果您的信息为NSString
,则可以执行以下操作:
CFStringRef* copyDescription(void* info)
{
return CFStringCreateCopy(someAllocator, (CFStringRef) info);
}
我没有尝试过,所以它可能无效。