为什么此 Swift 代码会泄漏内存,我该如何处理?
Why does this Swift code leak memory, and how do I handle it?
此 Swift 代码(基于 Stack Overflow 上的另一个 post)计算一千万个 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() 函数消耗内存而不是自动释放它是怎么回事?我 can/should 在代码中做了什么来释放它不再需要的内存吗?
可能 md5
函数正在创建自动释放的对象。试试这个:
for var i = 0; i < 10000000; i++ {
autoreleasepool {
let hash = md5(String(format:"%u", i))
}
}
此 Swift 代码(基于 Stack Overflow 上的另一个 post)计算一千万个 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() 函数消耗内存而不是自动释放它是怎么回事?我 can/should 在代码中做了什么来释放它不再需要的内存吗?
可能 md5
函数正在创建自动释放的对象。试试这个:
for var i = 0; i < 10000000; i++ {
autoreleasepool {
let hash = md5(String(format:"%u", i))
}
}