是否可以手动从内存中清除对象的内容?
特别是,我正在处理
NSData
。我尝试过使用 data.length = 0
和 data.setData(NSData)
。
我知道
ARC
会在超出其所属范围后进入并进行清理,但是是否可以在我需要时手动强制此过程?
我认为您对 ARC 有一些误解,我想澄清一下。 ARC 的目标是确保不会发生内存泄漏。它负责在对象的生命周期中跟踪对象,并确保在没有对其的引用时将其“释放”。
需要注意的是,“释放”内存并不一定意味着“用 0 覆盖所有内存”。
这只是意味着内存将被指定为未使用。当系统需要为新对象分配内存时,释放的内存将成为分配的候选者。
无法保证这种重新分配会发生,因此释放的内存很可能包含原始数据,并且永远不会被覆盖。
更新:看起来自 2022 年以来,Apple 平台在释放时做到零内存,因为它压缩得更好,这在高内存压力下有所帮助。 https://forums.swift.org/t/erase-dea located-memory/34964/13
请注意,这只是性能优化,当然不能保证您可以依赖安全目的。