好的,这是交易,我讨厌提出有关我的调试和崩溃的问题.因为我自己经常处理它们,但即使在已经查看了多个问题之后,我也无法绕过它.
好的,这就是问题,我发现我的应用程序随机打开和关闭崩溃与此堆栈跟踪:
*** -[ViewController respondsToSelector:]: message sent to deallocated instance 0x1e5d2ef0
Run Code Online (Sandbox Code Playgroud)
在哪里ViewController可以有所不同,有时会在我的代码崩溃,有地方NO关联到特定的ViewController和不拥有或调用它.
另外,为了获得控制台跟踪,我已经启用了Zombies,否则我根本就没有控制台打印,我只会得到:objc_msgSend,我知道这意味着我正在发布消息.但我找不到那个地方......我真的被卡住了!通常我总是调试我的崩溃,所以我真的坚持这个.
同样,这会在不同时间,不同时间,不同时间在不同的地方崩溃.它崩溃的地方几乎没有相关性ViewController.而且我觉得这很令人困惑.
你需要我的任何代码吗?我有很多文件,因为它在不同的地方崩溃,分发我的代码将是一个烂摊子!
我试图在没有运气的情况下添加符号断点,并且在iOS的Instruments应用程序中没有Zombies.我无法在模拟器上运行我的应用程序,因为它有不支持的架构框架.
感谢大家...
我按下了ALT + CMD + R并在Arguments> Environment Variables中激活了NSZombieEnabled.此外,我在诊断>内存管理>启用僵尸对象中激活它.
但是,当我构建并运行时,在某些时候我的应用程序崩溃,在控制台中给我这个无用的消息:
*** -[CALayer retainCount]: message sent to deallocated instance 0x656b260
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪也没用.我将细节级滑块一直向右移动.线程1只是告诉我这个:

一切都是系统所有,并没有一行与我的应用程序相关.所以很明显NSZombiesEnabled不能像在Xcode 3中那样工作,它停在死对象上.
有没有办法弄清楚哪个 CALayer过早解除分配?
更新:因此,在建立和运行大约100次后突然问题消失了!它完全消失了!最好的部分:我没有以任何方式修改我的代码!在中间我用clean命令清理了build文件夹和项目几次,并在Simulator中删除了几次app.
更新2:幸运的是问题再次出现.而现在似乎持久.幸运的是,因为我更喜欢找到根本原因,而不是随意地烦扰用户.
更新3:最后偶然发现它:
startButton = newBttn;
Run Code Online (Sandbox Code Playgroud)
本来应该:
self.startButton = newBttn;
Run Code Online (Sandbox Code Playgroud)
startButton是一个保留属性,在-dealloc我发布了它.因此,它在大多数(但不是全部)情况下得到了过度释放,在视图消失之后它崩溃了,给出了奇怪的CALayer retainCount消息.
Zombies Instrument(CMD + I)最终指出它与按钮有关.只是不知道为什么和在哪里.
Clang Static Analyzer没有抱怨这个明显的故障.