我的应用程序在调用委托时(在IBAction方法内)随机时间后崩溃,但仅在Simulator中的iPhone 4S上崩溃。所有其他较新的iPhone都很棒。
observeEvent()
当然我正在使用ARC。可能是什么原因?
解决: 在某些条件下传递委托方法的参数无意中从内存中释放。将其改为强类型有帮助。
答案 0 :(得分:2)
原因是您使用的是assign
。这基本上意味着“让我崩溃”。如果你的delegate
不存在,你就会指向垃圾,任何访问垃圾的尝试都会导致崩溃。实际上,你已经抛弃了ARC给你的优势。
要恢复该优势,请改用weak
。现在,如果您的delegate
不再存在,您将拥有nil
并且可以继续进行。
摆脱崩溃之后,您现在可以检查nil
并尝试找出为什么您的delegate
已经不再存在,而您显然没有期待它。请记住,您所看到的问题是我们所谓的“诊断”;代表可能很久以前就已经不存在了,或者它可能从来没有被分配过,但是认为这是一个完全独立的事情。