gpt4 book ai didi

objective-c - 为什么 CFRelease(NULL) 会崩溃?

转载 作者:太空狗 更新时间:2023-10-30 03:12:38 32 4
gpt4 key购买 nike

CFRelease 不检查 NULL 是有原因的吗? [nil release]; 时不是不能接受吗?免费(空);删除空值;一切正常吗?

最佳答案

CoreFoundation 的源代码是公开的。具体来说,对于 Snow Leopard,CFRelease 的代码在 http://www.opensource.apple.com/source/CF/CF-550/CFRuntime.c 中。

相关部分如下所示:

void CFRelease(CFTypeRef cf) {
if (NULL == cf) HALT;
#if DEPLOYMENT_TARGET_MACOSX || DEPLOYMENT_TARGET_EMBEDDED
if (CF_IS_COLLECTABLE(cf)) {
if (CFTYPE_IS_OBJC(cf)) {
// release the GC-visible reference.
auto_zone_release(auto_zone(), (void*)cf);
} else {
// special-case CF objects for better performance.
_CFRelease(cf);
}
return;
}
#endif
}

这没有回答您有关设计动机的问题,但您还询问了为什么 CFRelease 不检查 NULL。当 NULL 作为参数传递时,它会检查并故意失败。

我个人的看法与 Quinn 的相似 - CF 设计者认为传递 NULL 是一种编程错误。

关于objective-c - 为什么 CFRelease(NULL) 会崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1135214/

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