gpt4 book ai didi

c - 将 C 原始值包装在 CFNumbers 的 CFArray 中

转载 作者:太空宇宙 更新时间:2023-11-03 23:20:12 24 4
gpt4 key购买 nike

实现将原始数字的 C 数组包装到 CFNumbers 的 CFArray 中的方法的最佳方法是什么?

我想这样调用:

double values[] = {1.2345, 678.9};
CFArrayRef arr = NumberWrappedValuesArray(&values, 2, kCFNumberDoubleType);

并试过这个:

CFArrayRef NumberWrappedValuesArray(void * valueArrayPtr, CFIndex count, CFNumberType numberType) {
CFMutableArrayRef array = CFArrayCreateMutable(NULL, count, &kCFTypeArrayCallBacks);

for (int i = 0; i < count; i++) {
CFNumberRef numberWrappedValue = CFNumberCreate(NULL, numberType, &valueArrayPtr[i]);
CFArrayAppendValue(array, numberWrappedValue);
CFRelease(numberWrappedValue);
}

CFRelease(array);
return array;
}
  1. 它不起作用(返回的数组有 0 个元素),为什么以及如何修复它?
  2. 是否有更优雅的方式,可以避免使用可变的 CFArray?

谢谢!

最佳答案

您可以使用 CFArrayCreate .

例子:

CFArrayRef NumberWrappedValuesArray(void *valueArrayPtr, size_t size, CFIndex count, CFNumberType numberType) {
size_t i, n;
CFArrayRef ret;
CFNumberRef *ref = malloc(sizeof(CFNumberRef) * count);

/* create array of boxed types. */
for (i = 0, n = count; i < n; ++i)
ref[i] = CFNumberCreate(NULL, numberType, ((char *)valueArrayPtr) + (size * i));

/* create CFArray. */
ret = CFArrayCreate(NULL, (const void **)ref, count, &kCFTypeArrayCallBacks);

/* release boxed types and malloc'ed array. */
for (i = 0; i < n; ++i)
CFRelease(ref[i]);
free(ref);

/* return CFArray, without releasing first! Has to be done by the caller. */
return ret;
}

为清楚起见省略了错误处理。

关于c - 将 C 原始值包装在 CFNumbers 的 CFArray 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41782290/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com