微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

objective-c – 带有ARC的main()中的EXC_BAD_ACCESS,但没有提示错误

我的想法已经不多了.我在使用ARC的项目上收到EXC_BAD_ACCESS.根据调试器,它在main()中. NSZombieEnabled设置为YES但我没有看到任何callstack或Class / Type或任何东西.检查器/配置文件也是如此.在应用程序崩溃后的某个时间,我得到的只是“会话超时”.

而且很难在我的代码中找到它.

我正在设置像

NSLog(@"CrashLog: <%@:%@:%d:%s>",NsstringFromClass([self class]),NsstringFromSelector(_cmd),__LINE__,__FILE__);

关于enty和退出方法代码,但我还没有找到任何有用的模式.我所能看到的是,当抛出EXC_BAD_ACCESS时,我所有的方法都已经存在.

有关如何隔离问题的任何想法?

Tim建议在gdb中使用back trace(bt).结果是:

#0  0x0be87580 in TI::Favonius::BeamSearch::choose_hit_test_node ()
#1  0x0be87b5f in TI::Favonius::BeamSearch::update_for_touch ()
#2  0x0be8ee32 in TI::Favonius::strokeBuildManager::update_search_for_touch ()
#3  0x0be8f58f in TI::Favonius::strokeBuildManager::key_down_or_drag_hit_test_for_UI ()
#4  0x0be6ba8b in TIInputManagerZephyr::simulate_touches_for_input_string ()
#5  0x0be7e5d9 in -[TIKeyboardInputManagerZephyr candidates] ()
#6  0x00678345 in -[UIKeyboardImpl generateAutocorrectionReplacements:] ()
#7  0x007dcaec in __71-[UITextInteractionAssistant scheduleReplacementsForRange:withOptions:]_block_invoke_0 ()
#8  0x007f6db2 in -[UITextSelectionView calculateAndShowReplacements:] ()
#9  0x00e255fd in __NSFireDelayedPerform ()
#10 0x01a03976 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ ()
#11 0x01a03417 in __CFRunLoopDoTimer ()
#12 0x019667e0 in __CFRunLoopRun ()
#13 0x01965dd4 in CFRunLoopRunSpecific ()
#14 0x01965ceb in CFRunLoopRunInMode ()
#15 0x01ccb879 in GSEventRunModal ()
#16 0x01ccb93e in GSEventRun ()
#17 0x0050d38b in UIApplicationMain ()
#18 0x000033e0 in main (argc=1,argv=0xbffff5fc) at /Users/Hermann/AppDev/fcApp/fcApp/main.m:16

解决方法

仍然有办法通过ARC获得EXC_BAD_ACCESS.我碰到的一些

>如果你正在做一个你制作一个对象并且异步调用你的东西 – 你必须确保在某处保留对它的引用,否则ARC将释放它.一个例子是UIImagePicker – 您不能只创建一个本地图像选择器变量并调用它(然后在它回调时释放它) – 你必须创建一个属性并保持它
>如果你不总是使用属性来保持它,你可能会遇到麻烦 – ARC使用强弱的存在来知道该怎么做 – 如果你使用ivar代替,你可能会欺骗ARC(不是100%肯定这一点).确保不执行此操作的一种简单方法是使用@synthesize var = _var而不是让属性和ivar具有相同的名称.这样,如果你忘记了self.var = obj并且只使用var = obj就会抱怨.
>我在手势和标签中遇到了一个错误标签视图没有保留IB添加的手势 – 我在这里记录了它

Crash when using gesture recognizers in StoryBoard

在这些情况下,僵尸应该提供帮助 – 所以它没有帮助意味着你可能不会过早地导致释放发生.更有可能是你正在调整内存 – 我会检查所有强制转换以及你使用内置数组或非对象指针的任何地方,以确保你不会超出界限. Guard Malloc可以提供帮助

https://developer.apple.com/library/ios/#documentation/Performance/Conceptual/ManagingMemory/Articles/MallocDebug.html

原文地址:https://www.jb51.cc/c/113657.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐