import Foundation
let path = "/Users/user/file.swift"
while (true) {
let _ = path.components(separatedBy: "/")
}
以及如何防止这种情况?
代码当然是演示。
此代码不会泄漏。它只是(可能)永久存储内存,因为您永远不会通过耗尽自动释放池来释放它。您可以通过使用以下命令创建自己的自动释放池块来解决此问题@autoreleasepool
:
while (true) {
@autoreleasepool {
let _ = path.components(separatedBy: "/")
}
}
通常在事件循环结束时会自动耗尽该池,但是此代码永远不会达到这一点,因此它需要创建和释放自己的池。
上面的“(可能)”是因为它取决于优化器设置以及有关components(separatedBy:)
当前实现方式的详细信息。在许多情况下,优化器会自动处理自动释放的对象。
有关自动释放池块的更多信息,请参见《高级内存管理编程指南》中的“使用自动释放池块”。有关可可内存管理的更多背景(以及自动释放的含义),请参阅该指南的其余部分。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句