使用单例时的 Xcode 静态分析器性能

Posted

技术标签:

【中文标题】使用单例时的 Xcode 静态分析器性能【英文标题】:Xcode static analyzer performance when using singletons 【发布时间】:2011-07-15 21:49:03 【问题描述】:

我无法理解 XCode 中的静态分析器如何识别涉及单例的可能泄漏。在下面的代码中,我收到警告,第一行以及第一个 return 语句中可能存在泄漏。分析器将这些警告放在第二个 return 语句中。由于我没有在这些行中进行任何分配,因此我认为是对单例的访问及其可能的分配导致了此警告。谁能向我解释一下静态分析器发生了什么?

        if ((self.tableView.editing & ([[[[GroupList sharedGroupList] newGroup] linkArray] count] < [[GrazeConstants sharedGrazeConstants] maxLinksPerGroup])) | 
            (([[[[GroupList sharedGroupList] newGroup] linkArray] count] == 0) & !self.tableView.editing)) 
            return ([[[[GroupList sharedGroupList] newGroup] linkArray] count]+1);
         else 
            return ([[[[GroupList sharedGroupList] newGroup] linkArray] count]);
        

【问题讨论】:

【参考方案1】:

new-prefixed 方法等价于 alloc+init 根据 Cocoa 内存管理约定对。静态分析器假设您的 newGroup 方法返回一个保留计数为 +1 的对象,而不是自动释放的对象。

重命名方法(例如,groupmakeGroup),如果无法更改名称,请添加 NS_RETURNS_NOT_RETAINED attribute。

【讨论】:

谢谢。我注意到似乎与新的前缀方法存在相关性。但我从来没有想过分析器会使用名称来假设行为。很容易解决。

以上是关于使用单例时的 Xcode 静态分析器性能的主要内容,如果未能解决你的问题,请参考以下文章

如何在静态库项目中使用 XCode 性能工具?

unity,啥时候用静态类,啥时候用单例

使用单例时的三种单例写法

Xcode静态检查分析代码

Java枚举单例模式比DCL和静态单例要好?———反编译分析单例枚举类

Java枚举单例模式比DCL和静态单例要好?———反编译分析单例枚举类