我该如何解决这个clang警告:“+0保留计数的对象返回给调用者,其中+1(拥有)保留计数是预期的”?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (111)

我有一段Objective-C代码,如下所示:

- (NSString *)copyData:(NSData *)data
{
    NSString *path = [[[self outputDirectory] stringByAppendingPathComponent:@"archive"] stringByAppendingPathExtension:@"zip"];
    NSLog(@"Copying data to %@", path);
    [data writeToFile:path atomically:NO];
    return path;
}

从初始化程序调用代码,如下所示:

- (id)initWithData:(NSData *)data
{
    if ((self = [super init]) != nil) {
        NSString *path = [self copyData:data];        // Line 41 (referenced in warning, shown below)
        return [self initWithContentsOfFile:path];
    }
    return self;
}

运行铛静态分析器时,我得到以下path变量警告:

第41行分配的对象的潜在泄漏并存储在“路径”中 具有+0保留计数的对象返回给调用者,其中+1(拥有)保留计数是预期的。

我很困惑。我的理解是stringByAppendingPathComponent应该返回一个自动释放的字符串,所以它应该有一个净保留计数为0.(显然我不想保留它。)

我尝试改变copyData:以下内容,但没有摆脱警告:

return [[path retain] autorelease];

那么这个警告是怎么处理的?

提问于
用户回答回答于

我怀疑它只是注意到一个带有前缀copy和标记的方法,它应该返回调用者拥有的东西,因为它认为它遵循可可命名约定。

就你而言,当然,你指的是文件和其他东西,所以这是一个可以忽略的警告。如果你更改方法的名称,改为saveData:相反,我打赌警告会消失。

热门问答

MGOBE Team Room 和Room 的区别是什么?

推荐已采纳
您好,createRoom 的 teamNumber 为1,如果需要使用不同的teamId区分玩家,可以使用createTeamRoom。roomType这个参数是标志,例如在matchRoom接口就需要输入roomtype作为参数,之后从房间列表中找到 roomType和max...... 展开详请

信鸽推送支持各大厂商的离线推送,点击离线消息怎么做到先启动应用到首页再跳转到要打开的消息界面?

您好,有两种方式实现: 方式一:直接使用默认打开app,然后在receiver里面解析参数再跳转到指定的页面。 方式二:使用intent打开主页面,然后在主页面里面解析参数再跳转到指定的页面。 参考文档配置:https://cloud.tencent.com/document/p...... 展开详请

基于腾讯云区块链平台开发了区块链应用,上线前,还需要提供其它材料备案么?

Nancy WU

腾讯云 · 高级产品经理 (已认证)

腾讯云区块链产品经理,与区块链一同成长,欢迎交流
推荐

腾讯云区块链TBaaS服务已获国家互联网信息办公室第一批境内区块链信息服务备案,基于TBaaS开发上线后的区块链应用程序建议根据《区块链信息服务管理规定》等有关规定获取备案相关信息。

【有奖互动】新年将至,如何过一个技术范的新年?

气象学家气象学家记录气象文献阅读、编程和气象相关资讯。感谢关注!欢迎加入气象AI和Python交流群!
;************************************************* ; Happy_new_year_2021.ncl ;************************************************ ; ; Concepts ...... 展开详请

Linux系统加了弹性网卡却不能从外部访问?

推荐
回答来自于问答智囊团成员:Htroy 专栏:https://cloud.tencent.com/developer/column/89781 为了给云服务器增加一个外网IP,实现单主机多 IP 部署,或者在一个CVM上接入到多个私有网络中,我们可以通过绑定弹性网卡的方式实现。...... 展开详请

腾讯云上如何自建DNS?

济南庆典wtk软件工程师
推荐
回答来自于问答智囊团成员:22 专栏:https://cloud.tencent.com/developer/column/89781 安装配置: 1. #yum install -y bind bind-chroot bind-utils 2.主配置文件/...... 展开详请

所属标签

扫码关注云+社区

领取腾讯云代金券