代码之家  ›  专栏  ›  技术社区  ›  user362178

在iOS设备上安全释放ObjC对象

  •  4
  • user362178  · 技术社区  · 15 年前

    如果我理解正确,应用程序的内存将保存到闪存中(如果它重新启动)。假设一个足智多谋的黑客能够读取这个内存。从理论上讲他有时能读出 NSString

    3 回复  |  直到 9 年前
        1
  •  5
  •   hotpaw2    9 年前

    不要将安全数据存储在目标C数据类型中。它们是不透明的数据类型,每次试图清除某些部分时,它们都可能在内存中生成和/或留下大量数据副本。

    使用非不透明的纯C数据类型(字符数组等),一旦使用完毕,当应用程序重新启动时,这些数据类型就可以归零。您还可以混淆数组元素,使字符串在内存转储中的搜索更加困难。

        2
  •  1
  •   Richard J. Ross III    15 年前

    即使有一个越狱的想法,这也不太可能,因为记忆的位置可能很深。如果您真的很担心这个问题,这里有一个解决方案,如果您不担心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 :)
    }
    
        3
  •  1
  •   Brad    15 年前

    不 必须释放对象-并给你机会删除它们(在另一个答案中讨论过)。

    如果你真的担心这一点-我会禁用你的应用程序上的快速切换,以确保这永远不会发生,此外,实现某种类型的对象超过清除代码,如上所述。