Dr.*_*eon 0 cocoa exc-bad-access objective-c quartz-graphics cagradientlayer
我正在尝试使用Scintilla组件的最新功能,该组件提供类似OSX的文本突出显示效果(黄色动画弹跳框),并且我遇到了间歇性弹出的错误:
EXC_BAD_ACCESS
指向这个特定的行:
if (layerFindIndicator!=nil)
if ([layerFindIndicator animationForKey:@"animateFound"])
[layerFindIndicator removeAnimationForKey:@"animateFound"];
Run Code Online (Sandbox Code Playgroud)
(ifs是我的;以防万一我把对象layerFindIndicator弄为零,或者解除分配或其他什么......不幸的是,它没有帮助......)
layerFindIndicator似乎是一个子类CAGradientLayer.(您可能会看到完整的代码layerFindIndicator,在这里).
既然,我是Quartz Core的绝对新手,请给我任何关于如何进行调试的提示?
既然,我是Quartz Core的绝对新手,请给我任何关于如何进行调试的提示?
这与QuartzCore没有任何关系(至少,我希望不是) - 这是一般的 - 对象 - 已经被杀死 - 在它之前的时间 - 如何找到杀手的东西.
在Xcode中:
Xcode将为该操作构建,然后启动Instruments.
仪器会提示您选择模板; 你想要僵尸模板.一旦您选择了它,Instruments将创建一个跟踪文档并运行您的应用程序.切换到您的应用程序(如果它不是最前面的),然后做任何导致崩溃的事情.
如果崩溃真的是一个死对象崩溃,僵尸将揭示它.你会在Instruments的时间线上得到一个标志,上面写着"发送给僵尸对象0xd3c2b1a0的消息",你的程序可能很快就会退出.
在那个标志是一个小小的按钮,看起来像这样:➲除了它将是灰色的.点击它.
这会将您带到该对象的历史记录(实际上是该地址的历史记录,包括任何先前的对象或在该地址开始的其他分配).显示扩展详细信息窗格(显示在堆栈跟踪右侧的那个),然后向下滚动到最后,然后逐步向后移动(向上),查看版本和自动释放,查找不是平衡对象的分配或保留.
解决方案可能涉及以下一项或多项:
strong或weak不是assign/unsafe_unretainedweak属性和__weak实例变量(两者都nil在引用的对象死亡时自动设置)并将局部变量隐式初始化为nil但这取决于你在仪器中发现的东西.而且,当然,你的问题很可能 - 糟糕的访问 - 根本不是一个死对象,所有这些都无法帮助你.