Ios 如何避免在回调取消分配的委托对象时崩溃

Ios 如何避免在回调取消分配的委托对象时崩溃,ios,objective-c,cocoa-touch,crash,automatic-ref-counting,Ios,Objective C,Cocoa Touch,Crash,Automatic Ref Counting,我的应用程序在ARC上,我仍然很少看到崩溃。然后,我看到我正在将视图控制器设置为警报视图的代理,当警报出现在屏幕上时,点击“确定”按钮,我将返回到上一个视图,而我当前的视图控制器正在解除锁定。解除锁定后,我接到UIKit关于警报视图的电话,它崩溃了。为了安全处理,我为UIAlertView创建了一个属性,现在在dealloc中,我将此UIAlertView的委托设置为nil。这个现在很好用 我看到另一个崩溃随机发生: -[CFString release]: message sent to de

我的应用程序在ARC上,我仍然很少看到崩溃。然后,我看到我正在将视图控制器设置为警报视图的代理,当警报出现在屏幕上时,点击“确定”按钮,我将返回到上一个视图,而我当前的视图控制器正在解除锁定。解除锁定后,我接到UIKit关于警报视图的电话,它崩溃了。为了安全处理,我为
UIAlertView
创建了一个属性,现在在
dealloc
中,我将此
UIAlertView
的委托设置为
nil
。这个现在很好用

我看到另一个崩溃随机发生:

-[CFString release]: message sent to deallocated instance 0xd2de900

我这里的问题是,在很多地方,我创建一些对象的本地实例(自定义视图控制器或iOS对象,如
UIAlertView
),并将视图控制器设置为它的代理。我是否需要为所有属性创建类级属性,并在
dealloc
中将其委托给
nil
?是否有其他简单的替代方法来确保在委托对象消失后不会发生回调。

能否将委托设置为相关对象的弱引用?当其引用的对象被解除锁定时,_弱变量应将自身设置为nil。我认为最明显的答案是不要解除分配仍用作委托的对象。@HotLicks这应该是答案。这应该是答案。事情似乎很正常,直到你提到你的控制器被解除锁定,然后你接到UIKit的电话询问你的警报视图。你接到UIKit的电话是什么意思?听起来好像您正在保留UIAlertView的一个实例并重新使用它,这可能是您的问题的一部分。我在2次事件中收到这些消息1)-(MyViewControllerController alertView:didDismissWithButtonIndex:]2)[UIAlertViewAccessibility(SafeCegory)\u performPopup:animationType:revealedBySpringBoardAlert:]