在处理我的应用时,我遇到了一个有趣的问题。想象一下场景
在最后一步中,假设在调用A的方法时,B发现A对象不再存在。然后会发生什么?
我不确定但它会导致崩溃吗?
如果是,那么请建议我如何避免这种情况。
在我的情况下,我将viewcontroller指定为某个对象的委托,比如说viewDidLoad
方法中的X.有些情况下,在X调用viewcontroller中定义的委托方法之前,viewcontroller会被销毁。
简而言之,在视图控制器的卸载阶段同样只调用一次该方法
viewDidLoad
处于加载阶段。
答案 0 :(得分:1)
您不应该达到一个对象持有对另一个对象的引用的情况,该对象可能在没有通知所有者对象的情况下在其他地方解除分配。
取消分配对象A
时通知对象B
(例如,通过在对象B中创建成员a
nill
)或将您的设计/流程修改为永不允许{{ 1}}在A
完成之前被解除分配(例如,如果可能,在B
中指定为委托时保留A
答案 1 :(得分:1)
在课程之间实现这种沟通的最佳方式(A类可以随时解除分配)正在聆听 NSNotifications
。
正如您所说,使用弱(分配)代表是危险的,需要额外考虑
使用强大的委托也可以创建一个内存膨胀(为什么我们应该在从视图中弹出视图控制器这么长时间后保留它?)。
有关NSNotificationCenter和通知的更多信息,您可以在SDK文档中找到大量信息..对于特定问题,您知道在哪里提问..
答案 2 :(得分:0)
检查有效的委托对象应该足够了。
if (delegate)
[delegate method];