有人可以向我解释为什么当我按下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中出现同样的问题,弹出+崩溃)。
答案 0 :(得分:0)
嗯,最好在dealloc方法或connectionDidFinishLoading委托中释放连接对象。但我不认为它用于释放后退按钮上的连接,因为一旦按下后退按钮,对象就会被自身销毁并调用dealloc方法。因此,使用dealloc方法放置代码以释放连接。
答案 1 :(得分:0)
我建议你使用viewwilldisappear。即使你提出另一个模态视图控制器也没问题。只是在你的viewwilldisappear中这样做。在.h文件中声明你的连接对象然后
if(urConnection){
[urconnection Cancel];
[urconnection release];
}