首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以下代码中是否存在内存泄漏?

以下代码中是否存在内存泄漏?
EN

Stack Overflow用户
提问于 2012-06-12 11:14:57
回答 2查看 276关注 0票数 0

如果我计算一个大于200Mb的文件的MD5值,应用程序将加速大量内存和crash.Is在以下代码中是否有内存泄漏?有没有更好的方法来计算巨型视频文件的MD5值?

代码语言:javascript
复制
+ (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;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-12 12:13:06

查看一个潜在的解决方案here。它使用CFReadStream接口。

祝好运

时间

票数 0
EN

Stack Overflow用户

发布于 2012-06-12 11:42:09

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

代码语言:javascript
复制
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 

并将此代码放在方法的末尾

代码语言:javascript
复制
[pool release];
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10990119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档