2011-07-15 26 views
1

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

 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]); 
     } 

回答

4

new -prefixed方法根据可可存储器管理约定是相当于alloc + init对。静态分析器假设您的newGroup方法正在返回带有+1保留计数的对象,而不是自动发布的对象。

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

+0

谢谢。我注意到,似乎与新的前缀方法有关。但我从未梦想过分析仪使用名称来承担行为。容易解决。 –

相关问题