为什么这个Swift代码会泄漏内存,我该如何处理呢?

时间:2015-12-05 06:52:36

标签: swift memory memory-leaks md5

这个Swift代码(基于Stack Overflow上的另一篇文章)计算了一千万个MD5哈希值(并且为了这个例子,它们对它们没有任何作用)。但是md5()函数会泄漏内存;它运行的时间越长,消耗的内存就越多:

import Foundation

func md5(string: String) -> [UInt8] {
    var digest = [UInt8](count: Int(CC_MD5_DIGEST_LENGTH), repeatedValue: 0)
    if let data = string.dataUsingEncoding(NSUTF8StringEncoding) {
        CC_MD5(data.bytes, CC_LONG(data.length), &digest)
    }
    return digest
}

for var i = 0; i < 10000000; i++ {
    let hash = md5(String(format:"%u", i))
}

这个md5()函数有什么消耗内存而不是自动释放它?我可以/应该在代码中做些什么来使它释放它不再需要的内存吗?

1 个答案:

答案 0 :(得分:3)

md5函数可能正在创建自动释放的对象。试试这个:

for var i = 0; i < 10000000; i++ {
    autoreleasepool {
        let hash = md5(String(format:"%u", i))
    }
}