Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/44.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iphone-使用cftree创建树类_Iphone_Objective C_Ios_Core Foundation - Fatal编程技术网

iphone-使用cftree创建树类

iphone-使用cftree创建树类,iphone,objective-c,ios,core-foundation,Iphone,Objective C,Ios,Core Foundation,我想用CFTree创建一个像NSArray这样的树类。 (实际上,NSTree不存在,所以我正在尝试创建“类似NSTree的树”。) 但CFTree似乎请求某些类型的类。 我想制作一个通用类,可以处理各种类,比如NSArray 以下是iphonedev站点的示例 static CFTreeRef CreateMyTree(CFAllocatorRef allocator) { MyTreeInfo *info; CFTreeContext ctx; info =

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

但CFTree似乎请求某些类型的类。 我想制作一个通用类,可以处理各种类,比如NSArray

以下是iphonedev站点的示例

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
的实例,只需将上下文的
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);