このコードにリークがないことはほぼ確実ですが、Xcode アナライザーは「潜在的な」リークがあると報告しています (Xcode 4.6.1)。
+ (MySHA1hash *)sha1HashWithHashBytes:(unsigned char *)hash length:(unsigned int)length;
{
return [[[MySHA1hash alloc] initWithHashBytes:hash length:length] autorelease];
}
問題が Xcode が誤検知を報告することである場合、警告を黙らせる方法でコードを構造化する方法を見つけたいと思います。
私が理解できない方法で漏れている可能性もありますが、誰かが私が実際にどのように漏れているかを見ることができれば、そのフィードバックも喜んで受け取ります.
initWithHashBytes を単に init に置き換えると、リークが報告されなくなるため、これは私が呼び出す init 関数と何らかの関係があるに違いありません。そのために、initWithHashBytes の本体も含めます。
- (id)initWithHashBytes:(unsigned char *)hash length:(unsigned int)length
{
if (hash != nil && length <= SHA_DIGEST_LENGTH) {
NSData *data = [NSData dataWithBytes:hash length:length];
self = [self initWithHash:data];
}
else {
self = nil;
}
return self;
}
- (id)initWithHash:(NSData *)hash
{
if ([hash length] <= SHA_DIGEST_LENGTH && (self = [super init]) != nil) {
finished = YES;
[hash getBytes:sha_Result];
hashValue = [NSNumber numberWithInt:[hash hash]];
}
else {
self = nil;
}
return self;
}