首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >线程化NSStream

线程化NSStream
EN

Stack Overflow用户
提问于 2012-01-30 23:26:43
回答 1查看 1.9K关注 0票数 2

我有一个持续打开的TCP连接,用于与外部设备通信。在通信管道中发生了很多事情,导致UI有时变得没有响应。

我想把通信放在一个单独的线程上。我理解detachNewThread以及它是如何调用@selector的。我的问题是,我不确定如何将其与NSStream之类的东西结合使用

EN

回答 1

Stack Overflow用户

发布于 2012-01-30 23:41:55

与手动创建线程和管理线程安全问题相比,您可能更喜欢使用中央调度中心(GCD)。这允许你在操作系统认为最合适的地方,在远离主线程的地方执行代码包和一些状态关闭的块。如果你创建了一个串行调度队列,你甚至可以确定,如果你发布了一个新的数据块,而旧的数据块还没有完成,系统会一直等到它完成。

例如。

代码语言:javascript
复制
// you'd want to make this an instance variable in a real program
dispatch_queue_t serialDispatchQueue = 
            dispatch_queue_create(
                       "A handy label for debugging",
                       DISPATCH_QUEUE_SERIAL);

...

dispatch_async(serialDispatchQueue,
^{
    NSLog(@"all code in here occurs on the dispatch queue ...");
});

/* lots of other things here */

dispatch_async(serialDispatchQueue,
^{
    NSLog(@"... and this won't happen until after everything already dispatched");
});

...

// cleanup, for when you're done
dispatch_release(serialDispatchQueue);

快速介绍一下GCD is here,苹果的more thorough introduction也值得一读。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9066266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档