Я пытаюсь создать изменяемый словарь, в котором есть слабые ссылки для объектов-значений (ключи ведут себя нормально).Вот как я пытаюсь это сделать:
+ (id)mutableDictionaryUsingWeakReferencesWithCapacity:(NSUInteger)capacity
{
CFDictionaryKeyCallBacks keyCallbacks = {0, CFRetain, CFRelease, CFCopyDescription, CFEqual, CFHash};
CFDictionaryValueCallBacks valueCallbacks = {0, NULL, NULL, CFCopyDescription, CFEqual};
id<NSObject> obj = (id)(CFDictionaryCreateMutable(NULL, capacity, &keyCallbacks, &valueCallbacks));
return [obj autorelease];
}
К сожалению, я получаю предупреждение ( Инициализация от несовместимого типа указателя ) при объявлении keyCallbacks, и я его отслеживалвплоть до использования CFRetain и CFRelease.По некоторым причинам эти обратные вызовы не совпадают с необходимыми прототипами (CFDictionaryRetainCallback и CFDictionaryReleaseCallback)
В документации говорится, что пример CFDictionaryRetainCallback должен выглядеть примерно так:
const void *MyCallBack (
CFAllocatorRef allocator,
const void *value
);
Но существующий CFRetainобъявляется как
CFTypeRef CFRetain(CFTypeRef cf);
В нем отсутствует параметр allocator, и поэтому я думаю, что компилятор выдает предупреждение: это не идеальное совпадение в сигнатуре функции.
Кто-нибудь пыталсясделать что-то подобное?