2012-06-12 53 views
0

如果我计算大于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。

好运

-2

如果要在新线程中使用此方法,则必须在该方法的开头写入以下代码。

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 

,并把这个代码在方法

[pool release];