Используя числа в списках свойств
Вы не можете использовать значения числовых данных 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; |
} |