iphone - 用cftree创建一个树类

时间:2011-07-28 09:24:04

标签: iphone objective-c ios core-foundation

我想用CFTree制作一个像NSArray的树类。 (实际上NSTree不存在所以我试图让'NSTree像树一样'。)

但是CFTree似乎要求某种类型。 我想创建一个可以处理各种类的通用类,如NSArray。

这是iPhone开发网站的例子。

static CFTreeRef CreateMyTree(CFAllocatorRef allocator) { 
    MyTreeInfo *info; 
    CFTreeContext ctx; 

    info = CFAllocatorAllocate(allocator, sizeof(MyTreeInfo), 0); 
    info->address = 0; 
    info->symbol = NULL; 
    info->countCurrent = 0; 
    info->countTotal = 0; 

    ctx.version = 0; 
    ctx.info = info; 
    ctx.retain = AllocTreeInfo; 
    ctx.release = FreeTreeInfo; 
    ctx.copyDescription = NULL; 

    return CFTreeCreate(allocator, &ctx); 
} 

我想使用通用类而不是“MyTreeInfo”。 有什么办法吗?

感谢。

1 个答案:

答案 0 :(得分:3)

当然,CFTree可以保存您想要的任何数据。如果您要存储CFType的实例,则只需将上下文的retainrelease设置为CFRetainCFRelease。然后,您也可以将copyDescription设置为CFCopyDescription。像这样:

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

...

CFStringRef string = CFSTR("foo");
CFTreeRef tree = CreateMyTree(string);
NSLog(@"%@", tree);
CFRelease(tree);