【发布时间】:2012-10-08 21:06:50
【问题描述】:
我在开发我的应用程序时遇到了一个有趣的问题。想象一下场景
- 存在一个对象,我们称它为 A。
- A,然后创建某个基于委托的类的对象 (B),例如 NSURLConnection。
- A 将自己指定为 B 的委托,前提是 A 已实现所有必需的委托方法。
- A 要求 B 开始其处理。在我们的示例中,即从某个服务器获取数据。
- B 取完数据后,会立即调用 A 的某个指定方法。
在最后一步中,假设在调用 A 的方法时,B 发现 A 对象不再存在。然后会发生什么???
我不确定,但它会导致崩溃吗?
如果是,请建议我如何避免这种情况。
在我的例子中,我将视图控制器分配为某个对象的委托,例如 viewDidLoad 方法中的 X。在某些情况下,视图控制器在 X 调用视图控制器中定义的委托方法之前被销毁。
- 如果将 X 的委托分配给 nil 可以解决问题。那么在哪 我应该这样做吗?
简而言之,哪个方法在视图控制器的卸载阶段同样只被调用一次
viewDidLoad 处于加载阶段。
【问题讨论】:
-
请注意,
NSURLConnection确实保留其代表。 -
@Guillaume 是的,你是对的。一切都是为了保留代表。如果我们将代理设置为 nil,那就更好了。
-
是的,它肯定会导致崩溃。
标签: ios uiviewcontroller delegates crash viewdidload