Используя числа в списках свойств

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

CFNumber возражает подачам просто как обертке для числовых значений C. Базовая Основа включает функции, чтобы создать CFNumber, получить его значение и сравнить два объекта CFNumber. Обратите внимание на то, что объекты CFNumber являются неизменными относительно значения, но вводят информацию, может не сохраняться. Можно получить информацию о типе объекта CFNumber, но это - тип объект CFNumber, используемый для хранения значения, и может не быть тем же типом как исходные C данные.

При сравнении объектов CFNumber преобразование и сравнение следуют за человеческими ожиданиями и не C продвижение и правила сравнения. Отрицательный нуль сравнивает меньше, чем положительный нуль. Положительная бесконечность выдерживает сравнение больше, чем все кроме себя, с которым она выдерживает сравнение равный. Отрицательная бесконечность сравнивает меньше, чем все кроме себя, с которым она выдерживает сравнение равный. В отличие от общепринятой практики, если обоими числами является NaNs, то они выдерживают сравнение равный; если только одним из чисел является NaN, то NaN выдерживает сравнение больше, чем другое число, если это отрицательно, и меньше, чем другое число, если это положительно.

Перечисление 1 показывает, как создать объект CFNumber из 16-разрядного целого числа и затем получить информацию об объекте CFNumber.

Перечисление 1  , Создающее CFNumber, возражает от целого числа

Int16               sint16val = 276;
CFNumberRef         aCFNumber;
CFNumberType        type;
Int32               size;
Boolean             status;
 
// Make a CFNumber from a 16-bit integer.
aCFNumber = CFNumberCreate(kCFAllocatorDefault,
                           kCFNumberSInt16Type,
                           &sint16val);
 
// Find out what type is being used by this CFNumber.
type = CFNumberGetType(aCFNumber);
 
// Now find out the size in bytes.
size = CFNumberGetByteSize(aCFNumber);
 
// Get the value back from the CFNumber.
status = CFNumberGetValue(aCFNumber,
                          kCFNumberSInt16Type,
                          &sint16val);

Перечисление 2 создает другой объект CFNumber и сравнивает его с тем, создаваемым в Перечислении 1.

Перечисление 2  , Сравнивающее два объекта CFNumber

CFNumberRef         anotherCFNumber;
CFComparisonResult  result;
 
// Make a new CFNumber.
sint16val = 382;
anotherCFNumber = CFNumberCreate(kCFAllocatorDefault,
                        kCFNumberSInt16Type,
                        &sint16val);
 
// Compare two CFNumber objects.
result = CFNumberCompare(aCFNumber, anotherCFNumber, NULL);
 
switch (result) {
    case kCFCompareLessThan:
        printf("aCFNumber is less than anotherCFNumber.\n");
        break;
    case kCFCompareEqualTo:
        printf("aCFNumber is equal to anotherCFNumber.\n");
        break;
    case kCFCompareGreaterThan:
        printf("aCFNumber is greater than anotherCFNumber.\n");
        break;
}