在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
永远不能是空指针,可以吗?我学会了相当不信任自己而不是我正在使用的工具,所以我在这里问。如果有人向我解释我缺少什么,我会很高兴。
答案 0 :(得分:0)
返回分配值的任何内容理论上都可以返回NULL。
分析仪遵循多种可能的执行路径。在遵循“aUUID为NULL”的情况下,它最终会在NULL对象的CFRelease处结束。
并不是setUUID
是原因,而是发现问题的路径,所以这就是说明的路径。