我维护一个 Objective-C 项目,该项目使用实现垃圾收集脚本环境的 C 库。在某些情况下,我需要将保留的 Objective-C 对象放入脚本对象的私有(private)字段中。然后 Objective-C 对象在 Finalize 回调中被释放。
设置私有(private)值的调用如下所示,希望具有明显的语义:
if (!JS_SetPrivate(context, jsSelf, [self retain])) /* handle error */
最终回调执行以下操作:
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 静态分析器不反对 Finalize 回调中的随机释放,但在最初设置该值的地方,它会显示“在第 N 行分配的对象的潜在泄漏。”
是否有注释或不难看的模式可以抑制此消息? (我不想做像 [object PerformSelector:@selector(retain)]
这样的愚蠢事情。我也不想弄乱声明 JS_SetPrivate
的 header 。另请注意,赋予 JS_SetPrivate
的值是任意指针,不一定是 Objective-C 对象。
最佳答案
您可以在 JS_SetPrivate 上使用新的 NS_CONSUMED 属性:
http://clang-analyzer.llvm.org/annotations.html#attr_ns_consumed
关于cocoa - 告诉 Clang Static Analyzer 有关拥有引用的第三方库的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4822178/