我有一段 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];
那么这个警告是怎么回事呢?