当我试图分析.m时,我有一个奇怪的警告:
警告:带有+0保留计数的对象返回给调用者,其中+1 (拥有)预计保留计数
就行了
return [NSNumber numberWithInt:1];
代码是:
- (NSNumber*)index
{
return [NSNumber numberWithInt:1];
}
使用字符串的类似代码正确传递。
- (NSString*)ss
{
return [NSString stringWithFormat:@"%d", 1];
}
我是否错过了NSNumber构造函数,或者它是否在Analyzer中出错?
答案 0 :(得分:1)
这看起来像是分析器中的一个错误,因为在这两种情况下都会返回一个自动释放的对象。
请注意,您可以使用新的@
语法简化代码,如下所示:
- (NSNumber*)index
{
return @1;
}
如果必须返回表达式,则需要括号,如下所示:
- (NSNumber*)index
{
return @(value1 + value2); // Same as [NSNumber numberWithInt:value1 + value2];
}
答案 1 :(得分:1)
在Objective-C方法中,命名对于确定其内存管理至关重要。
名称以alloc
,new
,copy
或mutableCopy
开头的方法应返回具有+1保留计数的对象,而其他所有应返回自动释放的对象对象,即具有+0保留计数,如Advanced Memory Management Guide中所述。
考虑到这一点,如果你的方法真的命名为index
,那么分析器就错了。
作为旁注,您可以利用Objective-C文字来创建更简单的NSNumber
。
[NSNumber numberWithInt:1]
可以替换为
@1
和
[NSNumber numberWithInt:anExpression];
可以替换为
@(anExpression)