0

我因内存错误而完全不知所措。这个问题只happens在 上device而不在simulator. 它也仅在应用程序首次在设备上加载时发生。如果我关闭应用程序并重新启动它,问题不会自行预设。这是我得到的错误

-[CFString retain]: message sent to deallocated instance 0xfd5a2f0

我已经尽一切努力试图弄清楚释放的字符串是什么。请帮我弄清楚在设备而不是模拟器上运行时释放的对象是什么!提前致谢!

更新:我仍然没有解决方案,但我已经确认该应用程序将在我设置框架的代码行上持续崩溃,并且显示上述错误。如果我将此代码注释掉,应用程序将通过这一点,但可能会在其他奇怪的地方崩溃。我什至无法开始确定崩溃的起源。

CGRect frame = CGRectMake(27, 96, 265.0, 50.0);
someAcct.frame = frame;

我对此感到很困惑,因为这不是一个字符串。有任何想法吗?

更新 2:此问题与正在同步的 NSUser 默认值直接相关。这似乎很随机,但这就是导致问题的原因。有什么帮助吗?

更新3:问题已在一周前得到解决。这实际上是由于无法访问字符串。一个字符串被传递给一个方法,然后该方法确实起作用并将数据传递给另一个方法,依此类推。直到最后,数据将被写入用户默认值和文档文件夹中包含的本地 plist。突然之间,即使这些地方与字符串无关,应用程序也会在上述非常奇怪的地方持续崩溃。我很困惑,在玩了很长时间后,我决定转到 .h 文件并一次检查每个字符串,确保每个字符串都在 .m 文件中合成并且应用了 self.stringName在整个 .m 文件中。在花了一个小时之后,我终于找到了应该受到指责的字符串,问题现在已经解决。使用自我。stringName 允许找到内存并避免这些晦涩难懂且高度混乱的应用程序崩溃。感谢大家的所有建议和提示!

4

3 回答 3

1

为了帮助您追踪它,您是否可以尝试将 NSLog 放在 didFinishLaunching() 方法的开头、中间的某个位置和 didFinishLaunching() 的开头。

然后你也可以在你的应用程序显示的第一个视图控制器的 viewDidLoad() 中推送一个 NSLog。例如,如果您使用的是选项卡栏界面,则在第一个选项卡的根视图控制器中使用 NSLog。

您可以使用 NSLog(@"step 1"), NSLog(@"step 2"), NSLog(@"step 3") ... 来组织输出,以便您知道代码在崩溃之前设法达到的位置,而不是 NSLog(@"I am here")。

于 2012-11-12T06:52:48.770 回答
0

问题是retain count. 请参阅内存管理并检查您是否遗漏了某些内容。

别忘了转on NSZombieEnabled

于 2012-11-09T05:39:43.317 回答
0

一个原因可能是由于iOS兼容性。检查您的设备和模拟器是否使用相同的。尝试在与您的设备iOS相同版本的操作系统上运行模拟器并相应地更改release字符串。

于 2012-11-09T06:40:40.987 回答