如何手动将内存清零?

问题描述 投票:0回答:1

是否可以手动从内存中清除对象的内容?

特别是,我正在处理

NSData
。我尝试过使用
data.length = 0
data.setData(NSData)

我知道

ARC
会在超出其所属范围后进入并进行清理,但是是否可以在我需要时手动强制此过程?

swift security automatic-ref-counting memory-safety
1个回答
5
投票

我认为您对 ARC 有一些误解,我想澄清一下。 ARC 的目标是确保不会发生内存泄漏。它负责在对象的生命周期中跟踪对象,并确保在没有对其的引用时将其“释放”。

需要注意的是,“释放”内存并不一定意味着“用 0 覆盖所有内存”。

这只是意味着内存将被指定为未使用。当系统需要为新对象分配内存时,释放的内存将成为分配的候选者。

无法保证这种重新分配会发生,因此释放的内存很可能包含原始数据,并且永远不会被覆盖。


更新:看起来自 2022 年以来,Apple 平台在释放时做到零内存,因为它压缩得更好,这在高内存压力下有所帮助。 https://forums.swift.org/t/erase-dea located-memory/34964/13

请注意,这只是性能优化,当然不能保证您可以依赖安全目的。

© www.soinside.com 2019 - 2024. All rights reserved.