2016-08-14 62 views
0

我的应用程序在调用委托(IBAction方法内部)的随机时间后崩溃,但仅在Simulator中的iPhone 4S上调用。每个其他较新的iPhone都很棒。委托仅在iPhone 4S上存在访问权限错误

@propert (assign, nonatomic) id <MyDelegate> delegate; 

当然我正在使用ARC。可能是什么原因?

求解: 在某些情况下传递委托方法的参数无意中从内存中释放。将其更改为强类型有所帮助。

+0

很多...死参考主要。你能发布一些代码,调用堆栈,使用这个委托的类的错误日志和MyDelegate协议声明 –

+0

增加了一些你问的代码。 – loup4

回答

2

原因是您使用的是assign。这基本上意味着“崩溃我”。如果您的delegate不存在,您将被指向垃圾,任何访问该垃圾的尝试都将导致崩溃。实际上,你抛弃了ARC给你的优势。

要恢复该优势,请改为使用weak。现在,如果您的delegate不存在,您将拥有nil,并且可以顺利进行。

已经摆脱了崩溃的,你现在可以检查nil和揣摩为什么delegate一直办下去,当你显然不希望它。请记住,你所看到的问题就是我们所说的“诊断”。代表可能很久以前就已经不存在了,或者它可能从未被分配到首位,但认定这是一个完全独立的事情。