2015-02-24 56 views
0
  • 我有VC1这使得使用NSURLSession
  • NSURLTask网络呼叫dispatch_get_global_queue
  • NSURLTask进行会发生什么网络操作完成处理程序代码有completionHandler执行代码在VC1(代表)
  • 提交任务后,VC1弹出堆栈

上一条语句的预期行为是什么?我的意思是网络运营?完成处理程序如何执行?当请求的对象不存在

想象中的情况下,当正在从服务器接收数据时,VC1被弹出

需要做的事情,以防止应用程序崩溃是什么?

回答

0

从DOC

完成处理负载请求完成时调用。如果发送到通过调用sessionWithConfiguration创建的会话:delegate:delegateQueue:对于delegateQueue参数具有非零值,此处理程序在该委托队列上执行。

所以,这取决于你是否设置了委托。如果您尚未设置委托,则该对象将超出范围,并且不会调用完成块,因为没有任何内容引用NSURLTask。如果你已经设置了一个委托,它将在委托队列中指定的委托上被调用(如文档注释中所述) dataTaskWithURL:completionHandler

+0

是的,所以我想说的是它不应该是弹出的控制器网络请求,它应该是一个独立的请求对象,并且该对象应该由原始控制器保留。是否有你想让网络请求无阻塞的原因?你可以关闭视图控制器作为你的'NSURLTask'的完成块的一部分 – mckeejm 2015-02-24 18:07:57

+1

我接受答案,因为我认为我从这个答案中得到了一个好的提示 – GJain 2015-02-24 20:33:24