【发布时间】:2013-01-21 13:27:47
【问题描述】:
在 Xcode 4.6 中,clang 静态分析器警告我“调用 CFRelease 时出现空指针参数”。
这是分析器警告的屏幕截图:
如果你想复制和粘贴,这里是代码:
- (void)test
{
CFUUIDRef aUUID = CFUUIDCreate(kCFAllocatorDefault);
[self setUUID:aUUID];
CFRelease(aUUID);
}
- (void)setUUID:(CFUUIDRef)uuid
{
_uuid = uuid ? CFRetain(uuid) : CFUUIDCreate(kCFAllocatorDefault);
}
我不明白为什么它会警告我。 aUUID 永远不能是空指针,可以吗?我已经学会了不信任自己而不是我正在使用的工具,所以我在这里问。如果有人向我解释我缺少什么,我会非常高兴。
【问题讨论】:
-
CFUUIDCreate()可能会在分配失败的情况下返回NULL,但分析器警告的逻辑是错误的。aUUID在-setUUID:中没有变化,所以无论uuid是否为空,aUUID仍然可以为空。
标签: objective-c c xcode memory-management clang-static-analyzer