【发布时间】:2011-06-27 17:45:45
【问题描述】:
有人可以向我解释为什么当我按下 uinavigationcontroller 上的后退按钮时没有调用 viewcontroller dealloc 方法吗?
我想正确取消我的 nsurlconnection,这样它就不会因为它的委托不再有效而尝试显示弹出窗口和崩溃。
我的 NSURLConnection 初始化如下:
NSURLRequest *request = [ [ NSURLRequest alloc ] initWithURL: [ NSURL URLWithString: [ NSString stringWithFormat: @"http://www.url.com" ], string1, string2 ] ] ];
connection = [ [ NSURLConnection alloc ] initWithRequest: request delegate: self ];
[ request release ];
我在 connectionDidFinishLoading 和 didFailWithError 中释放了连接,但我想在用户按下后退按钮时取消并释放连接。最合乎逻辑的地方似乎是 dealloc 方法,但我怀疑它没有被调用,因为连接保留了 viewcontroller。
确保按下后退按钮时取消连接的最佳方法是什么?我不想使用 viewwilldissapear,因为我以模态方式呈现了另一个视图控制器,这不应该是取消的原因(除非在模态视图控制器中会出现同样的问题,弹出+崩溃)。
【问题讨论】:
-
NSURLConnection在初始化时保留其委托,并在连接完成加载、失败或取消时释放它。 -
如何处理超时?在出现超时弹出窗口之前,用户将弹出视图控制器。当超时最终发生时,这会导致崩溃.. :-(
-
“...崩溃,因为它的委托不再有效”。如果
NSURLConnection保留它的委托以确保它不是deallocated(除非它在其他地方过度发布),它怎么可能不再有效? -
你是对的,它仍然有效。但是,当我不在创建连接的视图控制器中并且我关闭了“超时”弹出窗口时,为什么我的应用程序会崩溃?
标签: iphone uinavigationcontroller nsurlconnection