了解更多IOS底层原理知识,关注腾讯课堂八点钟学院IOS高级开发
IOS学习交流群 431449751;
一般文件传输用Stream, 使用Stream有两种方式,一种是直接把所有数据一次性转化为Stream来传输,第二种是利用全双工管道(底层的创建socketpair,注意阻塞问题)这样对于大数据传输可以减少内存的开销。
第二种:在使用Stream中,代码
outStream和inputStream是全双工管道,其实际操作的是一等价的文件描述符
self.outSteam.delegate =self;
[self.outSteamscheduleInRunLoop:[NSRunLoopcurrentRunLoop]forMode:NSDefaultRunLoopMode];
[self.outSteamopen];
open the stream对象之前,向流对象发送scheduleInRunLoop:forMode:消息使其在一个runloop上可以接收到stream events,这样,当流对象不能接收更多数据的时候,可以使delegate避免阻塞。一旦open the stream,只要delegate持续向流对象写入数据,流对象就是一直向其delegate发送stream:handleEvent:消息,直到到达了流的末尾。这些消息中包含一个NSStreamEvent常量参数来指示事件的类型。(如末尾事件是NSStreamEventEndEncountered)
[request setHTTPBodyStream:self.inputStream];
request接管stream代理
注意:在stream:handleEvent:事件中 一定要有self.outSteam.delegate = nil,关闭stream And Stream remove runloop的条件
参考:官方Demo---SimpleURLConnections
IOS Http流传输:全双工管道与二进制流
本文探讨了在IOS中使用Http进行文件传输时,如何利用Stream实现全双工管道传输,以降低内存开销。通过设置Stream的委托并将其加入RunLoop,可以在数据写入时实时处理事件,直至流结束。同时,文章提醒在处理完Stream事件后,务必释放资源并关闭Stream。
2701

被折叠的 条评论
为什么被折叠?



