Проверка объектов

Основная характеристика Базовых объектов Основы - то, что они основываются на непрозрачном (или частный) тип; таким образом трудно проверить внутренние данные объекта непосредственно. 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));