UIViewController 和 NSURLConnection

UIViewController and NSURLConnection

我在 UIViewControllerviewDidLoad 中创建并启动了 NSURLConnectionUIViewController 被设置为 NSURLConnection.

的代表

如果 UIViewControllerNSURLConnection 完成其工作之前销毁(释放)会发生什么?我猜它会尝试调用委托,然后应用程序会崩溃。

以前(在使用ARC之前),我曾经通过强引用来记住NSURLConnection,而在UIViewControllerdealloc方法中cancel它。

我应该在使用 ARC 时做类似的事情吗?如果不是,为什么?

为什么不会你在使用 ARC 时做同样的事情?如果这在 ARC 之前很重要,那么在 ARC 之后也很重要。内存管理就是内存管理。将消息发送给不再存在的委托的危险是完全相同的。 所有 都一样,ARC 或没有 ARC — 除了在 ARC 下,为您调用 retainrelease

NSURLConnection 必须存储一些连接对象的内部引用,这就是它不会崩溃的原因。就我个人而言,我一直保持强烈的参考,因为我们不知道 sdk 内部实际上是如何保存这些参考的,而且这种行为也可能随着 sdk 的变化而改变。

您可以通过将委托方法设置为 nil 并在实例上调用取消方法来避免 viewcontroller 在连接对象之前 dealloc 时崩溃