告诉Clang Static Analyzer关于拥有引用的第三方库

时间:2011-01-27 21:38:00

标签: cocoa clang-static-analyzer

我维护一个Objective-C项目,该项目使用一个C库来实现垃圾收集脚本环境。在某些情况下,我需要将一个保留的Objective-C对象放在脚本对象的私有字段中。然后在终结回调中释放Objective-C对象。

设置私有值的调用看起来像这样,希望有明显的语义:

if (!JS_SetPrivate(context, jsSelf, [self retain])) /* handle error */

finalize回调执行此操作:

id object = JS_GetPrivate(context, jsSelf);
if (object != nil)
{
    [object clearJSSelf:jsSelf]; // Remove reference to JS wrapper.
    [object release];  // JS wrapper owned a reference.
    JS_SetPrivate(context, jsSelf, nil);
}

Clang Static Analyzer对finalize回调中的随机释放没有异议,但是最初设置的值是“在N行分配的对象的潜在泄漏。”

是否存在可以抑制此消息的注释或非丑陋模式? (我宁愿不做像[object performSelector:@selector(retain)]这样的愚蠢的事情。我也不想弄乱JS_SetPrivate声明的标题。另请注意,给JS_SetPrivate的值是任意的指针,不一定是Objective-C对象。

1 个答案:

答案 0 :(得分:2)

您可以在JS_SetPrivate上使用新的NS_CONSUMED属性:

http://clang-analyzer.llvm.org/annotations.html#attr_ns_consumed