为什么基本Swift代码会导致内存泄漏?

为什么基本Swift代码会导致内存泄漏?,swift,memory-leaks,Swift,Memory Leaks,我们怎样才能防止这种情况 当然,代码是演示的。此代码不会泄漏。它只是(可能)永久地积累内存,因为您永远不会让它通过耗尽自动释放池被释放。您可以通过使用@autoreleasepool创建自己的自动释放池块来修复此问题: import Foundation let path = "/Users/user/file.swift" while (true) { let _ = path.components(separatedBy: "/") } 该

我们怎样才能防止这种情况


当然,代码是演示的。

此代码不会泄漏。它只是(可能)永久地积累内存,因为您永远不会让它通过耗尽自动释放池被释放。您可以通过使用
@autoreleasepool
创建自己的自动释放池块来修复此问题:

import Foundation

let path = "/Users/user/file.swift"
while (true) {
    let _ = path.components(separatedBy: "/")
}
该池通常在事件循环结束时自动排空,但此代码从未到达该点,因此它需要创建并释放自己的池

上面的“(可能)”是因为它取决于优化器设置和有关当前如何实现
组件(separatedBy:)
的详细信息。在许多情况下,优化器将自动处理自动删除的对象

有关自动释放池块的详细信息,请参阅《高级内存管理编程指南》中的。有关Cocoa内存管理(以及autorelease的含义)的更多背景信息,请参阅该指南的其余部分

while (true) {
    @autoreleasepool {
        let _ = path.components(separatedBy: "/")
    }
}