Используя контекст средства выделения
Каждое средство выделения в Базовой Основе имеет контекст. Контекст является структурой, определяющей операционную среду для объекта и обычно состоящей из указателей функции. Контекст для средств выделения определяется 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 *
):
CFAllocatorAllocate
, выделяет блок памяти.CFAllocatorReallocate
перераспределяет блок памяти.CFAllocatorDeallocate
освобождает блок памяти.CFAllocatorGetPreferredSizeForSize
дает размер памяти, вероятно, чтобы быть выделенным, данным определенный запрос.