Clang静态分析器警告“调用CFRelease中的空指针参数”
问题描述:
在Xcode 4.6中,铿锵静态分析器警告我有关“调用CFRelease中的空指针参数”。Clang静态分析器警告“调用CFRelease中的空指针参数”
这里的分析预警的截图:
这里就是你要复制&的情况下,代码贴吧:
- (void)test
{
CFUUIDRef aUUID = CFUUIDCreate(kCFAllocatorDefault);
[self setUUID:aUUID];
CFRelease(aUUID);
}
- (void)setUUID:(CFUUIDRef)uuid
{
_uuid = uuid ? CFRetain(uuid) : CFUUIDCreate(kCFAllocatorDefault);
}
我不明白为什么它是警告我。 aUUID
永远不能是空指针,可以吗?我已经学会了比我使用的工具更不信任自己,所以我在这里问。如果有人向我解释我错过了什么,我会很高兴。
答
任何返回分配值的东西在理论上都可能返回NULL。
分析仪遵循多种可能的执行路径。在遵循“aUUID为NULL”的情况下,它最终结束于NULL对象的CFRelease。
这不是setUUID
是原因,这只是问题被发现的路径,所以这就是说明的路径。
'如果分配失败,'CFUUIDCreate()'可能返回'NULL',但分析器警告的逻辑错误。 '-UUID'在'-setUUID:'中没有改变,所以无论uuid是否为空,'aUUID'仍然可以为空。 –