我几乎可以肯定这段代码没有泄漏,但 Xcode 分析器报告说存在“潜在”泄漏(Xcode 4.6.1)。
+ (MySHA1hash *)sha1HashWithHashBytes:(unsigned char *)hash length:(unsigned int)length;
{
return [[[MySHA1hash alloc] initWithHashBytes:hash length:length] autorelease];
}
如果问题是 Xcode 报告了误报,我想弄清楚如何以一种使警告静音的方式构造代码。
我也有可能以我不理解的方式泄漏,但如果有人能看到我实际上是如何泄漏的,我也会很高兴得到反馈。
这一定和我调用的init函数有关,因为如果我简单地将initWithHashBytes替换为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;
}