Я пытаюсь реализовать категории для класса NSMutableDictionary по крайней мере с двумя методами: один для NSDictionary, который сохраняет (не копирует) свои ключи, и один для NSDictionary, который слабые ссылки его ключи (т.е. ничего не делает с ними).
Значения просто сохраняются в обоих случаях.
Таким образом, так как CFDictionaryRef называется бесплатным по мосту с NSDictionary, я фактически делаю следующее:
+ (NSMutableDictionary *)dictionaryWithWeakReferencedKeysForCapacity: (NSUInteger)capacity
{
CFDictionaryKeyCallBacks keyCallbacks = { 0, NULL, NULL, CFCopyDescription, CFEqual, NULL };
CFDictionaryValueCallBacks valueCallbacks = { 0, ___f_KBWS_DICTIONARY_RETAIN_CALLBACK, ___f_KBWS_DICTIONARY_RELEASE_CALLBACK, CFCopyDescription, CFEqual };
return [(id)CFDictionaryCreateMutable(NULL, capacity, &keyCallbacks, &valueCallbacks) autorelease];
}
Второй метод (для сохраненных ключей) выглядит одинаково и здесь не представлен.
Страшные функции внутри кода:
static const void *___f_KBWS_DICTIONARY_RETAIN_CALLBACK(CFAllocatorRef allocator, const void *value)
{
id object = (id)value;
return [object retain];
};
static void ___f_KBWS_DICTIONARY_RELEASE_CALLBACK(CFAllocatorRef allocator, const void *value)
{
id object = (id)value;
return [object release];
};
Мне пришлось написать их самостоятельно, как только я не нашел стандартных базовых обратных вызовов для сохранения и освобождения ключей.
Я планирую использовать эти категории для словарей, которые будут хранить только подклассы NSObjects.
Вопрос в том, являются ли эти допустимые обратные вызовы для этого случая?
Что-то не так в моем коде, кроме этого?