iphone - создайте класс дерева с помощью cftree - PullRequest
4 голосов
/ 28 июля 2011

Я хочу сделать класс дерева как NSArray с CFTree. (На самом деле 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 Ответ

3 голосов
/ 24 августа 2011

Конечно, 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);
...