首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何修复这个clang警告:"Object with +0 retain returned to caller where expected +1 (owning) retain“?

如何修复这个clang警告:"Object with +0 retain returned to caller where expected +1 (owning) retain“?
EN

Stack Overflow用户
提问于 2010-05-15 06:00:15
回答 5查看 3.7K关注 0票数 10

我有一段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;
}

当运行clang静态分析器时,我得到了关于path变量的以下警告:

在第41行分配并存储在‘

’中的对象的路径潜在泄漏

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

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

我已经尝试修改copyData:以返回以下内容,但它没有摆脱警告:

return [[path retain] autorelease];

那么这个警告是怎么回事呢?

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2837904

复制
相关文章

相似问题

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