为什么iOS应用程序在两个不同的设备上表现不同?

时间:2013-05-31 14:01:20

标签: ios memory-management crash

如果您正在使用Xcode开发iOS应用程序并在不同的设备上进行测试,那么为什么它会采用不同的行为,因为这些设备是相同型号并且具有相同的软件版本?

例如,我最近一直在开发一款应用。该应用程序的干净版本放在两个不同的iPhone5上。 (相同的软件版本)

然而,当在其中一部手机上运行时,我会收到与以下类似的内存释放错误:

*** -[CFString release]: message sent to deallocated instance

在其他设备上,不会出现此类错误。

对于任何应用都可能出现这种情况有明显的原因吗?

2 个答案:

答案 0 :(得分:0)

您的字符串未被保留或释放。当您尝试访问已释放的对象时,会出现此问题。可能是你的字符串在你访问它之前就已经发布了。我遇到了这个问题。

使用Zombies模板在Instruments中运行您的应用。这将显示哪个对象有内存问题,并且可以让您查看该对象的整个保留/发布历史记录。这应该指向正确的方向。

为Zombies启用

option+cmnd+r

然后选择Enable Zombie Objects,然后选择Run

答案 1 :(得分:0)

您的代码在不同设备上的行为可能不同。问题很可能存在于您的所有设备上,但在某些情况下只会导致问题。您无法预测自动释放池中的对象何时被取消分配,但您可以确定它并不总是具有相同的时间。在不同的设备上运行,由于其他后台进程,内存使用等原因,自动释放池的耗尽时间可能会有所不同。

您看到的重新分配错误很可能是由于您对自动释放的对象进行release调用,而您自己没有调用retain。检查您在没有init调用的情况下创建的对象的代码,但是您在release处调用的位置。另外,尝试在Instruments中运行代码,启用Zombie Objects,看看是否可以找到导致问题的NSString对象。