调度NSStream事件不是主要的运行循环
问题描述:
我用下面的代码在主运行循环调度事件:调度NSStream事件不是主要的运行循环
[stream setDelegate:self];
[stream scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
[stream open];
我认为这意味着NSStreamDelegate
事件被调度在主运行循环中,因此如果频率足够高,可能会影响UI响应。在我的程序中,这似乎确实是这种情况 - 即使事件处理程序自己分离到后台线程中也没有做很多工作。
我将如何去执行除mainRunLoop
之外的运行循环的调度?我是否需要创建一个线程?我可以直接创建一个NSRunLoop吗?需要执行什么设置?
答
我的建议是使用并发操作。我在github上有一个演示程序,演示如何传递这样的对象。你也会发现很多这样的项目。然后,您可以使用带有线程说明符的performSelector变体(这种操作的线程是持久的)。
op有一个运行循环,因此可以被消息传递,线程可以很容易地被取消,并且可以创建它们的倍数。
不错,但是如何在github中的“演示程序” - 一个链接将不胜感激。 (嗯,至少是它的名字?) –
@MottiShneor现在的代码是3岁,但可能会有所帮助:https://github.com/dhoerl/Concurrent_NSOperations –