1

当我尝试分析 .m 时,我收到了奇怪的警告:

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

在线上

return [NSNumber numberWithInt:1];

代码是:

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

正确传递带有字符串的类似代码。

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

我错过了 NSNumber 构造函数的某些内容,还是分析器中的错误?

4

2 回答 2

1

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

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

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

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

- (NSNumber*)index
{
  return @(value1 + value2); // Same as [NSNumber numberWithInt:value1 + value2];
}
于 2013-11-02T19:28:13.013 回答
1

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

名称以 、 或 开头的方法allocnew返回copy具有mutableCopy+1 保留计数的对象,而其他所有方法都应返回自动释放的对象,即具有 +0 保留计数,如高级内存管理指南中所述。

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


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

[NSNumber numberWithInt:1]

可以替换为

@1

[NSNumber numberWithInt:anExpression];

可以替换为

@(anExpression)
于 2013-11-02T19:34:37.123 回答