何时取消uinavigationcontroller中的nsurlconnection

时间:2011-06-27 17:45:46

标签: iphone uinavigationcontroller nsurlconnection

有人可以向我解释为什么当我按下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因为我以模态方式呈现另一个viewcontroller,这不应该是取消的原因(除非在模态viewcontroller中出现同样的问题,弹出+崩溃)。

2 个答案:

答案 0 :(得分:0)

嗯,最好在dealloc方法或connectionDidFinishLoading委托中释放连接对象。但我不认为它用于释放后退按钮上的连接,因为一旦按下后退按钮,对象就会被自身销毁并调用dealloc方法。因此,使用dealloc方法放置代码以释放连接。

答案 1 :(得分:0)

我建议你使用viewwilldisappear。即使你提出另一个模态视图控制器也没问题。只是在你的viewwilldisappear中这样做。在.h文件中声明你的连接对象然后

if(urConnection){
  [urconnection Cancel];
  [urconnection release];
}