我有一段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];
那么这个警告是怎么回事呢?
https://stackoverflow.com/questions/2837904
复制相似问题