Проверка объектов
Основная характеристика Базовых объектов Основы - то, что они основываются на непрозрачном (или частный) тип; таким образом трудно проверить внутренние данные объекта непосредственно. Base Services, однако, обеспечивает две функции, с которыми можно проверить Базовые объекты Основы. Эти функции возвращают описания объекта и типа объекта.
Для обнаружения содержания Базового объекта Основы вызовите CFCopyDescription
функция на том объекте и затем распечатывает последовательность символов, «содержавшуюся» в именуемом строковый объект:
Перечисление 1 Используя CFCopyDescription
void describe255(CFTypeRef tested) { |
char buffer[256]; |
CFIndex got; |
CFStringRef description = CFCopyDescription(tested); |
CFStringGetBytes(description, |
CFRangeMake(0, CFStringGetLength(description)), |
CFStringGetSystemEncoding(), '?', TRUE, buffer, 255, &got); |
buffer[got] = (char)0; |
fprintf(stdout, "%s", buffer); |
CFRelease(description); |
} |
Этот пример показывает всего один подход для печати описания. Вы могли использовать функции CFString кроме CFStringGetBytes
получить фактическую строку.
Для определения типа «неизвестного» объекта получите его идентификатор типа с CFGetTypeID
функционируйте и сравните то значение с известными идентификаторами типов, пока Вы не найдете соответствие. Вы получаете идентификатор типа объекта с CFGetTypeID
функция. Каждый непрозрачный тип также определяет функцию формы CF
ВвестиGetTypeID
(например, CFArrayGetTypeID
); эта функция возвращает идентификатор типа для того типа. Поэтому можно протестировать, является ли объект CFType элементом определенного непрозрачного типа как в:
CFTypeID type = CFGetTypeID(anObject); |
if (CFArrayGetTypeID() == type) |
printf(“anObject is an array.”); |
else |
printf(“anObject is NOT an array.”); |
Для отображения информации о типе Базового объекта Основы в отладчике используйте CFGetTypeID
функция для получения ее идентификатора типа затем передайте то значение CFCopyTypeIDDescription
функция:
/* aCFObject is any Core Foundation object */ |
CFStringRef descrip = CFCopyTypeIDDescription(CFGetTypeID(aCFObject)); |