2012-06-12 47 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];