【发布时间】:2010-09-08 06:48:40
【问题描述】:
我有一个控制器,它使用自定义类发出 HTTP GET 请求,该类充当NSURLConnection 的委托。一旦NSURLConnection 失败或完成,自定义类调用控制器上的方法并传递接收数据的NSData 对象。
我遇到了一个问题,即动态创建正在运行的控制器并将其推送到导航控制器的堆栈中。该控制器在其viewDidLoad 方法中发出HTTP GET 请求。如果用户在导航栏上快速按下“返回”,这个控制器就会被释放。如果这发生在 HTTP GET 请求完成之前,则生成的 NSURLConnection 回调将成为对已解除分配对象的方法调用,从而导致 EXC_BAD_ACCESS。
清理任何由控制器启动但实际上可能已经被释放的待处理NSURLConnections 的最佳方法是什么?
我添加了一些NSLog 语句,似乎我用作NSURLConnection 委托的自定义类实际上并没有收到dealloc 消息。我确保在 viewDidUnload 中将控制器的此类实例设置为 nil,并对其调用 release,但它似乎仍然比控制器寿命更长。
【问题讨论】:
标签: iphone objective-c memory-management nsurlconnection nsurlrequest