XCode 5,分析仪警告

时间:2013-11-02 19:22:08

标签: ios xcode xcode5

当我试图分析.m时,我有一个奇怪的警告:

  

警告:带有+0保留计数的对象返回给调用者,其中+1   (拥有)预计保留计数

就行了

return [NSNumber numberWithInt:1];

代码是:

- (NSNumber*)index
{
  return [NSNumber numberWithInt:1];
}

使用字符串的类似代码正确传递。

- (NSString*)ss
{
    return [NSString stringWithFormat:@"%d", 1];
}

我是否错过了NSNumber构造函数,或者它是否在Analyzer中出错?

2 个答案:

答案 0 :(得分:1)

这看起来像是分析器中的一个错误,因为在这两种情况下都会返回一个自动释放的对象。

请注意,您可以使用新的@语法简化代码,如下所示:

- (NSNumber*)index
{
  return @1;
}

如果必须返回表达式,则需要括号,如下所示:

- (NSNumber*)index
{
  return @(value1 + value2); // Same as [NSNumber numberWithInt:value1 + value2];
}

答案 1 :(得分:1)

在Objective-C方法中,命名对于确定其内存管理至关重要。

名称以allocnewcopymutableCopy开头的方法应返回具有+1保留计数的对象,而其他所有应返回自动释放的对象对象,即具有+0保留计数,如Advanced Memory Management Guide中所述。

考虑到这一点,如果你的方法真的命名为index,那么分析器就错了。


作为旁注,您可以利用Objective-C文字来创建更简单的NSNumber

[NSNumber numberWithInt:1]

可以替换为

@1

[NSNumber numberWithInt:anExpression];

可以替换为

@(anExpression)