当一个对象被解除分配时会发生什么?是否所有的内存都被淘汰了,或者痕迹仍然存在?
如果我理解正确,如果应用程序的内存处于活动状态,则会将其保存到闪存存储中。假设一个能够读出这个内存的足智多谋的黑客。理论上,如果该内存未被某些内容覆盖,他有时能够读出解除分配的NSString
的内容吗?
答案 0 :(得分:5)
不要将安全数据存储在Objective C数据类型中。它们是不透明的数据类型,每当您尝试清除某些部分时,可能会在内存中制作和/或留下大量数据副本。
补充:Swift数据类型似乎也是如此,包括结构,数组和字符串。它们是不透明的,因此谁知道DRAM中可能留下多少份数据副本。
使用非不透明的普通C数据类型(字符数组等),您可以在完成使用后立即使用它们,并且只要应用程序处于活动状态即可。您还可以对数组元素进行模糊处理,以便通过内存转储进行字符串搜索更加困难。
答案 1 :(得分:1)
即使使用越狱的iDevice,也不太可能,因为内存的位置可能非常深。如果你真的很担心,如果你不担心NSMutableString(你的类的dealloc)的开销,这里有一个解决方案:
-(void) dealloc
{
for (int i = 0; i < [myString length]; i++)
{
[myString replaceCharactersInRange:NSMakeRange(i, 1) withString:@"*"];
}
[myString release]; // or dealloc
// clean up rest
[super dealloc]; // dont forget this :)
}
答案 2 :(得分:1)
所以你也提出了关于写入Flash的问题。如果你的应用程序进入后台,不必然会释放对象 - 并让你有机会删除它们(如另一个答案中所述)。
如果您真的担心这个问题 - 除了在dealloc上实现某种类型的对象重写代码之外,我会在您的应用上禁用快速应用切换,以确保这种情况永远不会发生,如上所述。