次のような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 static Analyzerを実行すると、path
変数に対して次の警告が表示されます。
41行目に割り当てられ、「パス」に格納されたオブジェクトの潜在的なリーク
+0の保持カウントを持つオブジェクトは、+ 1(所有)の保持カウントが期待される呼び出し元に返されます
よくわかりません。私の理解ではstringByAppendingPathComponent
、自動解放された文字列を返す必要があるため、正味保持カウントは0である必要があります(明らかに、保持したくありません)。
私はcopyData:
以下を返すように変更しようとしましたが、警告を取り除くことができませんでした:
return [[path retain] autorelease];
では、この警告はどうなるのでしょうか。