gpt4 book ai didi

ios - 常量的 CFNumber 宏

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:11:03 25 4
gpt4 key购买 nike

很确定这个答案是否定的,但我不得不问这个问题已经够痛苦了:是否有一个 CFNumber 等同于 CFString 的 CFSTR 宏?为了避免这种事情:

char one = 1;
CFNumberRef cfONE = CFNumberCreate(kCFAllocatorDefault, kCFNumberCharType, &one);
if (cfONE != NULL) {
... finally I can compare something to the number 1! ...
CFRelease(cfONE);
} else {
// not likely, but possible, if you really want to be conservative
}

请注意,我没有在此特定代码中使用 Objective-C。

埃里克

最佳答案

如果你打算多次使用这个函数,你可以使用 static 修饰符而不再担心释放:

static CFNumberRef cfONE = NULL;
if (cfONE == NULL) {
static char one = 1;
cfONE = CFNumberCreate(kCFAllocatorDefault, kCFNumberCharType, &one);
assert (cfONE != NULL); // Oh no, destroy the world!
}

// ... finally I can compare something to the number 1! ...

只要你有静态,静态分析器就会让你独自处理泄漏问题,因为它是预期的恒定大小内存分配,O(1) 而不是 O(n ) 其中 n 是执行次数。

有几种方法可以使它成为一个宏。我想到了这个懒惰的:

#define CFNUMDEF(name, type, numberType, value) \
static CFNumberRef name = NULL; \
if ( name == NULL) { \
static type val = value ;\
name = CFNumberCreate(kCFAllocatorDefault, numberType , &val);\
assert ( name != NULL); \
}

CFNUMDEF(cfONE, char, kCFNumberCharType, 1);
// ... finally I can compare something to the number 1! ...

关于ios - 常量的 CFNumber 宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18751826/

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