为什么我的可可程序在启动过程中得到EXC_BAD_ACCESS?
时间:2020-03-05 18:54:02 来源:igfitidea点击:
在我的可可应用程序加载期间,我的程序由于消息EXC_BAD_ACCESS而崩溃。堆栈跟踪没有帮助。关于如何找到问题的任何线索?
解决方案
回答
这是一个可能的原因。有一个尚未初始化的IBOutlet对象,并且正在nil上调用一条消息。堆栈跟踪可能如下所示:
#0 0x90a594c7 in objc_msgSend #1 0xbffff7b8 in ?? #2 0x932899d8 in loadNib #3 0x932893d9 in +[NSBundle(NSNibLoading) _loadNibFile:nameTable:withZone:ownerBundle:] #4 0x9328903a in +[NSBundle(NSNibLoading) loadNibFile:externalNameTable:withZone:] #5 0x93288f7c in +[NSBundle(NSNibLoading) loadNibNamed:owner:] #6 0x93288cc3 in NSApplicationMain #7 0x00009f80 in main at main.mm:17
由于堆栈跟踪没有帮助,因此我们将必须逐步检查代码以查找错误。如果由于某种原因我们不能在执行的早期设置断点,请尝试插入一些Debugger();。调用将中断调试器。
回答
补充:取消存档失败的首要原因是忘记"返回自我";来自自定义类的-init。非常疼 :(
回答
我曾经见过这种情况,当我们尝试访问未正确保留的对象时,它或者不指向对象的有效副本,或者指向另一个类型的对象。在gdb中使用po和print逐步启动时,尽早放置断点并分析对象是最佳选择。
回答
检查控制台日志(Applications / Utilities / Console.app)。当程序在启动时崩溃,并且初始化有问题时,通常会在崩溃之前在其中写出一些有用的错误消息。
回答
这通常表示内存管理错误。
确保所有出口声明均遵循最佳做法:
@interface MyClass : MySuperclass { UIClass *myOutlet; } @property (nonatomic, retain) IBOutlet UIClass *myOutlet; @end
这种格式可确保我们在具有任何超类的任何平台上正确进行内存管理。
检查所有的" awakeFromNib"方法,以确保我们没有过度释放对象等。