Fork me on GitHub

NSStream线程阻塞处理

http://www.10bay.com/?p=149

[[session inputStream] scheduleInRunLoop:[NSRunLoop currentRunLoop]      forMode:NSDefaultRunLoopMode];

因主线程有事务要处理,会阻塞主线程外设事件的触发;

解决:

“将socket的runloopsource添加到新开的线程的runloop中,并在新线程中显示启动runloop就可以了”

创建一个线程,取得它的runloop,然后用类似上面的代码将其加入,这样就不会阻塞接收数据事件的回调了。

[NSThread detachNewThreadSelector: @select(act:) toTarget: self withObject:nil];

[[session inputStream] scheduleInRunLoop:threadRunLoop    forMode:NSDefaultRunLoopMode];
-(void)act:(id){    threadRunLoop = [NSRunloop currentRunloop];

if (!threadShouldExit)    {

[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:limitDate];

}

}
然后将stream加入到子线程的runloop中即可。

– 这个方法理论上是可行的,不过对其必要性还是存疑。

posted on 2012-05-15 19:25  pengyingh  阅读(616)  评论(0)    收藏  举报

导航