0

如果您正在使用 Xcode 开发 iOS 应用程序并在不同设备上对其进行测试,那么考虑到设备型号相同且软件版本相同,是否有任何理由说明它的行为会有所不同?

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

但是,在其中一部手机上运行时,我会收到类似于以下内容的内存释放错误:

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

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

是否有任何明显的理由说明为什么任何应用程序都可能出现这种情况?

4

2 回答 2

0

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

使用 Zombies 模板在 Instruments 中运行您的应用程序。这将向您显示哪个对象存在内存问题,并让您查看该对象的整个保留/释放历史记录。那应该为您指明正确的方向。

对于僵尸启用

option+cmnd+r

然后选择Enable Zombie Objects然后Run

于 2013-05-31T14:07:25.313 回答
0

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

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

于 2013-06-04T06:33:24.493 回答