【发布时间】:2012-07-09 02:41:55
【问题描述】:
我的应用程序在设备上运行时崩溃(顺便说一句),崩溃不是 100% 可重现的。但它似乎只发生在设备上,而不是在模拟器中。
当我使用 NSZombies 在模拟器中运行时,我从未发现任何问题。有人可以解释一下我下面的观点吗?
- 设备内存有限,可能因此而崩溃。
- 什么会被认为是会导致崩溃的大内存分配?
- 内存泄漏/大分配会导致内存损坏吗?
- 我所有的崩溃都是 EXC_BAD_ACCESS 但就像我说的,从来没有发生在模拟器上,所以我不能运行僵尸。 (或者还有其他方法吗?)
注意,我还在模拟器上模拟了内存不足警告,看看是否会导致问题。
这让我发疯了。任何帮助将不胜感激。
【问题讨论】:
-
有什么理由不能使用 ARC?只是为了排除内存问题。两者之间的主要区别也是区分大小写。模拟器不区分大小写,但设备是。但是“通常”,如果这是一个案例问题,您将得到 sigabrt 错误与 exc_bad_access。唯一要尝试的另一件事是在手机插入电源时在手机上运行它。这样任何错误都会输出到控制台。
-
不能去 ARC,因为我还必须支持 iOS 3.0(是的,我知道这很糟糕)。我已经尝试通过调试将其插入,但我看不到僵尸对象,也看不到引用计数或查看除了崩溃的行之外有意义的堆栈跟踪。我知道它在哪里崩溃,但我需要知道哪些其他类释放了这个对象。
-
使用断点。我确定你的一个对象是 nil (可能很快就会发布),这就是导致错误的原因。看这里放置一种通用断点(本帖第二条评论:stackoverflow.com/a/8072273/530933)
-
我已经考虑过欧文,但我几乎不可能像这样调试。原因是我填充了 200 多个对象并每 10 秒将它们插入到 NSDictionary 中。如果我在这个调用中设置一个断点,我会在这里坐好几天,毫不夸张。我猜字典中的一些条目会在某个时候自动发布。 PS:刚刚注意到您链接的评论实际上指向我添加异常断点,而不仅仅是任何断点。我会试试看!
标签: ios memory-management memory-leaks ios-simulator