我想用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”。 有什么办法吗?
感谢。
答案 0 :(得分:3)
当然,CFTree
可以保存您想要的任何数据。如果您要存储CFType
的实例,则只需将上下文的retain
和release
设置为CFRetain
和CFRelease
。然后,您也可以将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);