在Java中,线程安全PipedInputStream
和PipedOutputStream
类可用于将数据从一个线程传输到另一个线程。在iOS中它的等价物是什么?
如果我错了,请纠正我,但我的理解是来自Cocoa的NSPipe
仅用于进程之间的数据传输,但不用于线程之间。另外,由于它为此使用了一些本地目录,我假设某些临时文件用于此类传输。总结一下,
答案 0 :(得分:4)
与使用fork创建的POSIX线程不同,Java线程是轻量级的,并且共享相同的地址空间。在Java中不需要C-Style IPC,并且绝对不是为此目的创建PipedInputStream / PipedOutputStream。 Objective-C线程构建在POSIX上,但它们都共享相同的虚拟内存空间,因此您通常不在ObjC中执行任何IPC。
如果您希望在Objective C中的线程之间“共享”数据,只需将其写入适当的变量,并在必要时在线程之间发送可用数据的信号。最好的方法是使用条件。
如果您打算在Obj C中进行任何非平凡的线程工作,那么我强烈建议您阅读Apple's guide on thread safety。
答案 1 :(得分:1)
在线程之间传输数据的最简单方法是使用NSData对象和performSelector:onThread:withObject。
performSelector:onThread:withObject:waitUntilDone:modes
假设你有两个线程,threadX和threadY,每个线程都有一个对象,objectX和objectY。做类似的事情:
char buffer[100] = "Hello";
NSData *data = [NSData dataWithBytes:byBuffer length:100];
[objectY performSelector:@selector(haveSomeData:) onThread:threadY withObject:data waitUntilDone:NO modes:[NSArray arrayWithObject:NSDefaultRunLoopMode]];