我几乎可以肯定我在这段代码中没有泄漏,但Xcode分析器报告存在"潜在"泄漏(Xcode 4.6.1).
+ (MySHA1hash *)sha1HashWithHashBytes:(unsigned char *)hash length:(unsigned int)length;
{
return [[[MySHA1hash alloc] initWithHashBytes:hash length:length] autorelease];
}
Run Code Online (Sandbox Code Playgroud)

如果问题是Xcode报告误报,我想弄清楚如何构建代码以使警告静音.
也有可能我以一种我不理解的方式泄漏,但如果有人能看到我实际上是如何泄漏,我也很乐意得到这些反馈.
这必须与我调用的init函数有关,因为如果我只是用init替换initWithHashBytes,则不再报告泄漏.为此,我还包括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;
}
Run Code Online (Sandbox Code Playgroud)
这条线
self = nil;
Run Code Online (Sandbox Code Playgroud)
在initWithHashBytes:(和initWithHash:)是问题.您分配一个对象,但如果返回nil从initWithHashBytes:,该对象会被泄露,因为你会打电话给autorelease上nil,而不是你分配的对象.
self在你回来之前释放nil,一切都应该是好的.
| 归档时间: |
|
| 查看次数: |
1167 次 |
| 最近记录: |