有没有办法防止EXC_BAD_ACCESS应用程序崩溃,就像@try..@catch您可以优雅地处理异常一样.
更新:
代码在尝试取消引用无效指针时崩溃.这是第三方库,它与外部硬件接口,因此我无法在本地调试.我试图阻止它崩溃并将数据输出到我的应用程序上的调试控制台.
Rob*_*ier 14
在ObjC中,try/catch不会特别优雅地处理异常.您仍将泄漏内存并使系统处于未定义状态.除了罕见的例外,期望你只是捕捉,所以你可以在崩溃之前记录一些东西.一般而言,@catch为此目的,您不应该在程序的最高层使用任何地方.在某些特殊情况下,例外的使用有限,但在ObjC中很少见.有关更多信息,请参见" 异常编程指南".请参阅ObjC ARC文档中的以下内容:
标准的Cocoa约定是异常信号编程器错误,并不打算从中恢复.默认情况下使代码异常安全会对通常实际上并不关心异常安全的代码施加严格的运行时和代码大小惩罚.因此,ARC生成的代码默认在异常时泄漏,如果过程将立即终止,这很好.关注从异常中恢复的程序应该启用选项[-fobjc-arc-exceptions,它会对您的程序施加速度和内存惩罚].
同样如此EXC_BAD_ACCESS.您可以使用信号处理程序捕获它,以便记录一些信息,然后完成崩溃.有关这样做的好工具,请参阅PLCrashReporter.正确编写这样的处理程序非常困难,所以我强烈建议使用现有的框架.如果你EXC_BAD_ACCESS不正确地抓住,你可以很容易地陷入耗尽用户电池的死锁.
Guo*_*uan 11
你得到EXC_BAD_ACCESS,因为你传话给一个释放的对象往往.然后你可以检查一下NSZombie.什么是NSZombie?你可以看到:这个.它会捕获
EXC_BAD_ACCESS因为向已发布的对象发送消息.
您可以像这样设置NSZombie:检查 Enable Zombie Objects

你也可以得到EXC_BAD_ACCESS因为内存警告级别太高,或者你的内存太高,所以苹果会关闭你的应用程序.这 EXC_BAD_ACCESS太难以阻止了.我认为唯一的办法是尽可能低地管理你的记忆,有时你可以看到日志在哪里receive memory warning,当水平高时,它可能会得到EXC_BAD_ACCESS
您可以重写代码以避免出现这些错误.尽量不要引用任何空指针并保持对您想要访问的任何对象的引用.
| 归档时间: |
|
| 查看次数: |
20914 次 |
| 最近记录: |