【问题标题】:Core Data produces Analyzer warningsCore Data 产生分析器警告
【发布时间】:2011-01-04 13:42:36
【问题描述】:

我正在对应用程序进行最后的润色,并且我正在摆脱所有编译器/分析器警告。

我有一堆 Class 方法来包装我的应用程序对 Core Data 实体的访问。这是在“激怒”分析者。

+ (CDProductEntity*) newProductEntity {

    return (CDProductEntity*)[NSEntityDescription insertNewObjectForEntityForName:@"CDProductEntity" inManagedObjectContext:[self context]];
}

这会导致分析器警告:

返回 +0 保留计数的对象 给 +1(拥有)保留的调用者 预计计数

在调用上述类方法的方法中我有这个:

CDProductEntity *newEntity = [self newProductEntity];

这会导致分析器警告:

方法返回一个 Objective-C 对象 +1 保留计数(拥有 参考)

显式释放或自动释放 Core Data 实体通常非常糟糕,但这就是它要求我在这里做的吗? 首先它告诉我它有一个 +0 保留计数,这很糟糕,然后它告诉我它有一个 +1,这也很糟糕。

我可以做些什么来确保我正在处理分析器打嗝或我正确释放?

提前致谢

【问题讨论】:

    标签: xcode ios core-data clang-static-analyzer


    【解决方案1】:

    静态分析器抱怨的问题可能出在您的方法名称中 - 根据 obj-c 命名约定,名称中包含 alloc、new 或 copy 的方法应返回调用者“拥有”且必须释放的对象 - 而您的方法返回自动释放的对象。

    引用docs:

    您拥有自己创建的任何对象。
    你 使用方法“创建”对象 其名称以“alloc”开头或 “新”或包含“副本”(例如, alloc、newObject 或 mutableCopy)。

    因此,首先我建议您从方法名称中删除“新”

    【讨论】:

    • 谢谢你,弗拉基米尔:)你是正确的!我根本没想到,也永远不会猜到命名约定会引发分析器标志。好吧,没有借口,我不应该那样做。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 2019-09-24
    • 1970-01-01
    • 2015-02-06
    • 2017-01-16
    • 1970-01-01
    • 2021-11-25
    • 2018-12-25
    • 2015-07-22
    相关资源
    最近更新 更多