Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 两个NSURLConnections之间的流,阻止NSInputStream读取阻止所有连接?_Iphone_Ios_Networking_Nsurlconnection_Nsinputstream - Fatal编程技术网

Iphone 两个NSURLConnections之间的流,阻止NSInputStream读取阻止所有连接?

Iphone 两个NSURLConnections之间的流,阻止NSInputStream读取阻止所有连接?,iphone,ios,networking,nsurlconnection,nsinputstream,Iphone,Ios,Networking,Nsurlconnection,Nsinputstream,我试图在两个iOS NSURLConencions(一个下载,另一个上传)之间传输数据,但似乎无法使其工作 我有两个连接同时运行 一种是使用GET请求从url下载内容 另一个是将刚刚收到的相同内容上传到PUT请求的请求体中的另一个url 在上载连接中,我使用setHTTPBodyStream指定一个自定义NSInputStream,其读取方法返回以前从另一个连接接收到的数据 这两个NSURLConnection都安排在单独后台线程的运行循环中,因此任何(可能是阻塞的)委托回调都不会相互干扰(也

我试图在两个iOS NSURLConencions(一个下载,另一个上传)之间传输数据,但似乎无法使其工作

  • 我有两个连接同时运行
  • 一种是使用GET请求从url下载内容
  • 另一个是将刚刚收到的相同内容上传到PUT请求的请求体中的另一个url
  • 在上载连接中,我使用setHTTPBodyStream指定一个自定义NSInputStream,其读取方法返回以前从另一个连接接收到的数据
  • 这两个NSURLConnection都安排在单独后台线程的运行循环中,因此任何(可能是阻塞的)委托回调都不会相互干扰(也不会与主线程干扰)
所以我想它会像这样工作:

  • 上载连接在输入流上调用[read:maxLength](我已经覆盖了它)
  • 因为还没有可用的数据,所以读取调用被阻塞
  • 在另一个线程上,对下载连接的委托调用[connection:didReceiveData:]
  • 它将接收到的数据放入共享缓冲区,从而使其可用于上传连接的输入流
  • 上传流的读取调用现在不再被阻止,它可以返回一块数据
不幸的是,在实践中,这是行不通的。在上传流的read方法阻塞之后,下载连接的委托方法(例如didReceiveData)不再被调用。(注意,如果我在上传端禁用阻塞,那么下载端的didReceiveData确实会被调用。)

我怀疑这与上载输入流的read方法不是在创建连接和流对象的线程上调用,而是在其他线程(显然是由Cocoa创建的)上调用有关。好像这是两个NSURLConnections使用的共享线程,所以一旦它被阻塞,所有其他连接也停止工作。或者类似的

有人知道到底发生了什么吗

另外,是否有方法控制在哪个线程上调用请求体输入流的read方法