我想用CFTree制作一个像NSArray这样的树类。
(实际上 NSTree 不存在,所以我正在尝试制作“NSTree like tree”。)

但 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”。
有什么办法吗?

谢谢。

最佳答案

当然,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);

关于iphone - 用 cftree 创建一个树类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6856728/

10-09 16:13