3

对不起,但我必须先做一些介绍。

我有一堂课叫MJPEGStreamer. 它使用NSOutputStreamNSInputStream流式传输 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];

经过一点调试,我发现它正在创建这些线程,但没有正确停止它们。它会关闭NSStreams,但线程仍然存在。

然后我开始想知道这样做的最佳方法是什么:

  • 我是否应该保持原样,只是确保在关闭NSStreams 时杀死线程?(我如何杀死线程?)

  • 我应该创建一个所有MJPEGStreamer类都将在其上运行的新线程吗?

  • 我应该使用NSOperationQueue吗?

4

0 回答 0