使用CFTreeContext信息对象将NSString数据存储在CFTreeRef中是一种好习惯

时间:2015-08-08 07:18:43

标签: ios objective-c iphone ipad tree

我试图从DB创建一个树来创建自定义表。我正在做的是从数据库中获取数据并创建树结构。要创建子节点,我要使用info对象在Cftree中存储值。它对我来说很好。任何人都可以让我知道这种方法会有任何性能问题。因为我将NSString存储在树的每个节点的info对象中。如果它有性能问题,那么这是最好的方法。 我使用下面的代码块来创建Tree。

static CFTreeRef CreateMyTree(CFTypeRef rootObject) {
CFTreeContext ctx;
ctx.version = 0;
ctx.info = rootObject;
ctx.retain = CFRetain;
ctx.release = CFRelease;
ctx.copyDescription = CFCopyDescription;  
return CFTreeCreate(NULL, &ctx);
}

1 个答案:

答案 0 :(得分:2)

使用NSString s作为CFTree的数据没有问题。它的处理方式与其他数据大致相同。 NSString免费桥接到CFString,因此使用CFRetainCFReleaseCFCopyDescription进行回调是合适的。

如果您正在使用ARC,则需要使用(__bridge CFStringRef)强制转换来获取指针。

请注意,树和回调不会复制字符串。因此,如果您将对NSMutableString的引用放入树中并随后对其进行变异,那么将更改树的数据。这可能是也可能不是你想要的。考虑在将副本添加到树之前制作副本。

如果您遇到性能问题,则需要解释这些性能问题的性质以及您怀疑在NSString中使用CFTree作为原因的原因。如果您只是怀疑性能问题,那就不要了。在您衡量性能问题之前,您需要浪费时间。