Boolean CFReadStreamSetClient(CFReadStreamRef stream, CFOptionFlags streamEvents, CFReadStreamClientCallBack clientCB, CFStreamClientContext *clientContext);
注册stream 感兴趣的streamEvents 的CFReadStreamClientCallBack回调函数。
NSInteger bytesRead = [[self readStream] read:buffer maxLength:sizeof(buffer)];
该方法读取网络返回数据
NSOperation 调用概述
- (void)main --> startRequest --> (CFReadStreamOpen((CFReadStreamRef)[self readStream])) (真正发送数据) 感觉理解不到位,因为我用wireShark 没抓到东东)
中调用
[self performSelector:@selector(main) onThread:[[self class] threadForRequest:self] withObject:nil waitUntilDone:NO];
启动 main 方法在 threadForRequest runLoop 中
ASIHTTPRequest 中重载了 main 和start 方法
开启 一个线程
+ (void)runRequests
CFRunLoopRunInMode(kCFRunLoopDefaultMode, 1.0e10,TRUE);
监听 事件。
start 方法 添加 main 方法 到上面线程 去执行。
CFReadStreamCreateForStreamedHTTPRequest(kCFAllocatorDefault, request,(CFReadStreamRef)[self postBodyReadStream]))
用request 初始化一个 readStream
[self scheduleReadStream];
[[self readStream] scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:[self runLoopMode]];
将readStream 方法添加到 RunLoop 中。
ASIHTTP 开启一个线程 用于 发送和接收消息。
- (void)handleNetworkEvent:(CFStreamEventType)type
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
在这里 添加一个释放池,返回一个autorelease 的数据。再处理完后立即释放。
+ (void)initialize 在 alloc 前就调用了。