前言:我不是iOS开发人员,对iOS安全模型几乎一无所知。所以,如果这个问题真的很愚蠢,请原谅我。:)
考虑一个名为MyApp的应用程序,它在启动时会执行以下操作:
- 动态分配一块内存,比如使用malloc()
- 通过网络加载一些敏感数据,并将其存储在该内存块中
- 坐在那里无所事事
现在考虑以下场景:
- 用户启动MyApp
- 用户关闭MyApp
- 用户启动SometherApp
我的问题是:如果SometherApp也动态分配内存,那么操作系统返回的缓冲区中是否有可能包含MyApp调用(现已关闭)时放置的敏感数据?
还是RAM的内容被视为应用程序运行的沙盒的一部分?
理论上,一旦用户关闭应用程序(你必须确保应用程序关闭,而不仅仅是在后台运行),分配给该进程的内存就会被释放并返回。
引用ARC教程:
启用"自动引用计数"后,编译器将自动在程序中的正确位置插入保留、释放和自动释放。您再也不用担心这些了,因为编译器会为您做这件事。
因此,当应用程序关闭时,对任何具有某种内存分配的对象的所有引用都将被清除,因为当应用程序不运行时,将没有可引用的对象。
我说你必须确保它关闭的原因是,默认情况下,当你按下主页按钮时,一些应用程序不会关闭,但实际上会继续在后台运行。这可能会造成潜在的安全威胁,但可能性不大。为了确保该应用程序没有内存,请确保每次都完全关闭。确保代码做得正确,并且编写代码的人知道并跟踪他分配的内存。
如果安全性是一个大问题,那么请确保所有已分配的内存都能在代码中正确释放。然后确保你做了大量的内存泄漏测试等等,以确保没有对象与一定数量的内存一起躺着。
我只想说,我甚至不是ARC记忆管理的专业人士,所以最好与其他几个来源核实,以确保我的答案是正确的。
如果我说话有误,就会有人打我。