Objective c 是否可以复制CFTypeRef?
我想创建以下函数:Objective c 是否可以复制CFTypeRef?,objective-c,Objective C,我想创建以下函数: CFDictionary* CFDictionary_create(CFTypeRef **keys, CFTypeRef **values, int count){ return CFDictionaryCreate(NULL, (const void **)keys, (const void **)values, count, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBa
CFDictionary* CFDictionary_create(CFTypeRef **keys, CFTypeRef **values, int count){
return CFDictionaryCreate(NULL, (const void **)keys, (const void **)values, count, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
}
问题是键或值可能包含可变字符串(或其他可变对象),因此,我希望将整个数组复制到garuntee,以确保它们不会更改。如何执行此操作?否,在一般情况下,无法复制
CFTypeRef
通常,由此类函数的调用方来确保键在字典中没有发生变异。(如果一个值发生了变异,这不一定是个问题。例如,如果您有一个从名称到Person
对象的字典映射,则可以通过增加年龄或添加子对象等方式修改Person
对象。如果您建立了一个不发生变异的值的设计要求,那么它将再次取决于e调用方必须符合该要求。)
Cocoa的NSDictionary
类只是要求所有密钥都符合NSCopying
协议。传递在运行时不会导致错误的对象。除了要求所有CFType
对象的类型都是免费桥接到符合NSCopying
的类之外,您可以施加类似的要求。然后,你可以做如下事情:
CFTypeRef new_keys[count];
for (int i = 0; i < count; i++)
{
id<NSCopying> temp = (__bridge id<NSCopying>)keys[i];
temp = [temp copy];
new_keys[i] = CFBridgingRetain(temp);
}
CFDictionary* result = CFDictionaryCreate(NULL, (const void **)new_keys, (const void **)values, count, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
for (int i = 0; i < count; i++)
CFRelease(new_keys[i]);
return result;
CFTypeRef新_键[计数];
for(int i=0;i