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