Используя контекст средства выделения

Каждое средство выделения в Базовой Основе имеет контекст. Контекст является структурой, определяющей операционную среду для объекта и обычно состоящей из указателей функции. Контекст для средств выделения определяется CFAllocatorContext структура. В дополнение к указателям функции структура содержит поля для номера версии и для определяемых пользователем данных

Перечисление 1  структура CFAllocatorContext

typedef struct {
    CFIndex version;
    void * info;
    const void *(*retain)(const void *info);
    void (*release)(const void *info);
    CFStringRef (*copyDescription)(const void *info);
    void * (*allocate)(CFIndex size, CFOptionFlags hint, void *info);
    void * (*reallocate)(void *ptr, CFIndex newsize, CFOptionFlags hint, void *info);
    void (*deallocate)(void *ptr, void *info);
    CFIndex (*preferredSize)(CFIndex size, CFOptionFlags hint, void *info);
} CFAllocatorContext;
 

info поле содержит любые специально определенные данные для средства выделения. Например, средство выделения могло использовать info поле для отслеживания выдающихся выделений.

Если у Вас есть некоторые определяемые пользователем данные в контексте средства выделения ( info поле), используйте CFAllocatorGetContext функция для получения CFAllocatorContext структура для средства выделения. Тогда оцените или обработайте данные по мере необходимости. Следующий код обеспечивает пример этого:

Перечисление 2  , Получающее контекст средства выделения и определяемые пользователем данные

static int numOutstandingAllocations(CFAllocatorRef alloc) {
    CFAllocatorContext context;
    context.version = 0;
    CFAllocatorGetContext(alloc, &context);
    return (*(int *)(context.info));
}

Другие Базовые функции Основы вызывают связанные с памятью обратные вызовы, определенные в контексте средства выделения, и берут или возвращают невведенный указатель на блок памяти (void *):