如果我计算一个大于200Mb的文件的MD5值,该应用程序将加速大量内存并崩溃。以下代码中是否有任何内存泄漏? 有没有更好的方法来计算巨大的视频文件的MD5值?
+ (NSString *) md5ForFileContent:(NSString *)path
{
NSFileHandle *handle = [NSFileHandle fileHandleForReadingAtPath:path];
if (handle == nil) {
return nil;
}
CC_MD5_CTX md5;
CC_MD5_Init (&md5);
BOOL done = NO;
while (!done) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSData *fileData = [[NSData alloc] initWithData: [handle readDataOfLength:1024]];
CC_MD5_Update (&md5, [fileData bytes], [fileData length]);
if ([fileData length] == 0) {
done = YES;
}
[fileData release];
[pool release];
}
unsigned char digest[CC_MD5_DIGEST_LENGTH];
CC_MD5_Final (digest, &md5);
NSString *s = [NSString stringWithFormat: @"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
digest[0], digest[1],
digest[2], digest[3],
digest[4], digest[5],
digest[6], digest[7],
digest[8], digest[9],
digest[10], digest[11],
digest[12], digest[13],
digest[14], digest[15]];
return s;
}
答案 0 :(得分:0)
查看可能的解决方案here。它使用CFReadStream API。
祝你好运添
答案 1 :(得分:-2)
如果要在新线程中使用此方法,则必须在方法的开头编写以下代码。
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
并将此代码放在方法的末尾
[pool release];