很抱歉,但我必须先介绍一下。
我有一个名为MJPEGStreamer
的班级。它使用NSOutputStream
和NSInputStream
来传输MJPEG数据。我将同时运行这些类中的16个。
起初,我只是在我的主要课程中这样做:
MJPEGStreamer *client = ...;
[client start];
在MJPEGStreamer.m
:
[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
但这给了我非常差的表现和各种各样的错误。我假设我在主线程上运行了所有这些NSStream
,所以我改变了这个调用:
[client start]
到此:
[NSThread detachNewThreadSelector:@selector(start) toTarget:client withObject:nil];
经过一些调试后,我发现它是创建这些线程,但没有正确停止它们。它将关闭NSStream
s,但线程仍在那里。
然后我开始想知道最好的方法是什么:
我应该保持原样,只需确保在关闭NSStream
时杀死线程? (我如何杀死线程?)
我是否应该创建一个所有MJPEGStreamer
类都可以运行的新线程?
我应该使用NSOperationQueue
吗?