2015-08-08 72 views
1

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

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); 
} 

回答

2

有使用NSString S作为CFTree的数据没有问题。它的处理方式与其他数据非常相似。 NSString免费桥接到CFString,因此使用CFRetainCFReleaseCFCopyDescription作为回调是适当的。

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

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

如果您遇到性能问题,您需要解释这些性能问题的性质以及为什么您怀疑在CFTree中使用NSString作为原因。如果你只是嫌疑人性能问题,那么不要。直到你有衡量性能问题,你浪费你的时间。

相关问题