Http 用Stream传输

了解更多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)