我正在为我的助手任务制作一个简单的IPC模块,
我决定使用NSDistributionNotificationCenter
,因为它很简单。
但是我认为它需要在我没有的runloop中运行, 所以我需要创建一个RunLoop。
我在这里阅读了有关RunLoops的文档https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Multithreading/RunLoopManagement/RunLoopManagement.html
但是我不清楚,我应该怎么做这个RunLoop只用于接收和发送Notifications
。
有些人可以了解我的RunLoop
应该包含哪些内容吗?
它应该包含计时器吗?
如何将消息监听器附加到此RunLoop
?
我很抱歉,如果我的问题有点愚蠢 - 我以前从未使用runloops手动搞乱。
我知道我必须创建一个线程并为其分配一个runloop, 但目前尚不清楚如何添加观察者?我应该添加任何额外的东西吗?
答案 0 :(得分:2)
实际上它比我想象的容易得多 我正在回答我自己的问题,如果将来有人会为同样的事情而努力,他可能会在这里找到答案,或者至少是一个kickstart。
BOOL done = NO;
NSDistributedNotificationCenter * notificator = [NSDistributedNotificationCenter defaultCenter];
[notificator addObserver:self selector:@selector(gotObject:) name:@"com.ipc.test" object:nil];
// Add your sources or timers to the run loop and do any other setup.
do
{
// Start the run loop but return after each source is handled.
SInt32 result = CFRunLoopRunInMode(kCFRunLoopDefaultMode, 10, YES);
// If a source explicitly stopped the run loop, or if there are no
// sources or timers, go ahead and exit.
if ((result == kCFRunLoopRunStopped) || (result == kCFRunLoopRunFinished))
done = YES;
// Check for any other exit conditions here and set the
// done variable as needed.
}
while (!done);
实际上现在我发现了更简单的解决方案
NSDistributedNotificationCenter * notificator = [NSDistributedNotificationCenter defaultCenter];
[notificator addObserver:self selector:@selector(gotObject:) name:@"com.ipc.test" object:nil];
CFRunLoopRun();