对不起,但我必须先做一些介绍。
我有一堂课叫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
s 时杀死线程?(我如何杀死线程?)我应该创建一个所有
MJPEGStreamer
类都将在其上运行的新线程吗?我应该使用
NSOperationQueue
吗?