当我试图分析.m时,我得到了奇怪的警告:
警告:具有+0保留计数的对象返回给调用方,其中需要+1 (拥有)保留计数
在线上
return [NSNumber numberWithInt:1];守则是:
- (NSNumber*)index
{
return [NSNumber numberWithInt:1];
}具有字符串的类似代码将正确传递。
- (NSString*)ss
{
return [NSString stringWithFormat:@"%d", 1];
}我是否遗漏了NSNumber构造函数,或者是分析器中的bug?
发布于 2013-11-02 19:34:37
在Objective方法中,命名是决定它们的内存管理的关键。
名称以alloc、new、copy或mutableCopy开头的方法将返回具有+1保留计数的对象,而其他所有方法都应返回自动释放的对象,即+0保留计数,如高级内存管理指南中所解释的那样。
考虑到这一点,如果您的方法真正命名为index,那么分析器就错了。
顺便提一句,您可以利用Objective的文字来创建更简单的NSNumber。
[NSNumber numberWithInt:1]可代之以
@1和
[NSNumber numberWithInt:anExpression];可代之以
@(anExpression)发布于 2013-11-02 19:28:13
这看起来像分析器中的一个bug,因为在这两种情况下都会返回一个自动释放的对象。
请注意,可以使用新的@语法简化代码,如下所示:
- (NSNumber*)index
{
return @1;
}如果必须返回表达式,则需要括号,如下所示:
- (NSNumber*)index
{
return @(value1 + value2); // Same as [NSNumber numberWithInt:value1 + value2];
}https://stackoverflow.com/questions/19745860
复制相似问题