首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XCode 5,分析器警告

XCode 5,分析器警告
EN

Stack Overflow用户
提问于 2013-11-02 19:22:08
回答 2查看 115关注 0票数 1

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

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

在线上

代码语言:javascript
复制
return [NSNumber numberWithInt:1];

守则是:

代码语言:javascript
复制
- (NSNumber*)index
{
  return [NSNumber numberWithInt:1];
}

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

代码语言:javascript
复制
- (NSString*)ss
{
    return [NSString stringWithFormat:@"%d", 1];
}

我是否遗漏了NSNumber构造函数,或者是分析器中的bug?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-02 19:34:37

在Objective方法中,命名是决定它们的内存管理的关键。

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

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

顺便提一句,您可以利用Objective的文字来创建更简单的NSNumber

代码语言:javascript
复制
[NSNumber numberWithInt:1]

可代之以

代码语言:javascript
复制
@1

代码语言:javascript
复制
[NSNumber numberWithInt:anExpression];

可代之以

代码语言:javascript
复制
@(anExpression)
票数 1
EN

Stack Overflow用户

发布于 2013-11-02 19:28:13

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

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

代码语言:javascript
复制
- (NSNumber*)index
{
  return @1;
}

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

代码语言:javascript
复制
- (NSNumber*)index
{
  return @(value1 + value2); // Same as [NSNumber numberWithInt:value1 + value2];
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19745860

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档