cocoa - 告诉 Clang Static Analyzer 有关拥有引用的第三方库的信息

标签 cocoa clang-static-analyzer

我维护一个 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/

相关文章:

cocoa - 是否有一种标准方法可以让 NSAlert 有条件地关闭它所附加的窗口?

objective-c - 通过扩展名注册新的 OS X 文件类型并与 Cocoa 应用程序关联

c - 绕过C错误生成clang调试信息

swift - Clang Static Analyzer 可以和 Swift 一起使用吗?

xcode - 防止 Xcode/clang 在故意有缺陷的代码上引发逻辑错误

cocoa - 以编程方式检查进程是否正在 Mac 上运行

cocoa - 返回数组的正确方法

cocoa - 如何从其父 View 中删除带有圆角的 UIView?

c - 是否可以抑制 Xcode (clang) 分析器报告的问题实例?

c++ - 使用 char** argv 时如何避免指针运算