我注意到iOS模拟器和iOS设备的内存管理存在差异。 有时在设备上会因为尝试访问不再存在的对象而发生崩溃,而在模拟器上则不会出现(对象仍未收集)。
现在我有一个问题,当在模拟器视图上没有出现(可能会被解除分配),而在设备上一切都很好。我猜这也与内存管理有关。
哪里可以更深入地了解设备上和模拟器上的内存管理之间的差异?还有其他设备/模拟器差异。
P.S。我知道类似的问题:Difference of memory organization between iOS device and iPhone simulator 但是这个问题的答案并不能理解正在发生的事情,只是关于记忆警告的信息。
答案 0 :(得分:4)
@ FreeNickname的答案完全正确。你有一个错误,你只是想在一个配置中看到它。还有其他一些事情要记住:
NSOperation
。在任何一种情况下,建议仅在单个队列上修改给定对象(通常通过让后台任务执行计算/获取/任务,然后将结果发布回主队列以存储它)。答案 1 :(得分:2)
我认为你想要的不是模拟器和设备之间的区别,而是了解内存管理的工作原理。因为如果在设备或模拟器中的任何地方发生错误,则会出现错误,您必须修复它。 本手册相当简短,但它解释了为避免错误需要了解的所有基本规则。 iOS Memory Management Programming Guide
答案 2 :(得分:1)
内存管理在模拟器和IOS上是相同的。唯一的区别是,在模拟器上你有4GB虚拟内存和设备 - 只有真正的RAM。
如果您尝试显示取消分配的视图,应用程序将会同时扫描模拟器和设备。
所以主要区别在于,如果您在应用程序中有内存泄漏,那么您可以在设备上获得更早的信息。
答案 3 :(得分:0)
以上关于内存管理的答案是正确的。但是模拟器和物理设备之间的行为差异很小,有时很难注意到。
以下几点可能是您问题的可能答案。
如果您尝试访问程序中的资源文件(图像,声音等),请确保您区分大小写(大写/小写字母)。模拟器忽略了区分大小写,但程序在设备上崩溃。
示例:如果您有" Image.png"在您的项目中使用" image.png"要在程序中访问它,模拟器可能会加载文件但它肯定会在设备上崩溃。
如果您有更高分辨率的文件,它可能会加载到设备中,但不会出现在模拟器上,反之亦然(取决于您的计算机)。
您还可以检查两台设备上的互联网连接,也许您的程序正在使用外部链接,而您的计算机尚未连接。