objective-c - 向主运行循环添加源是否会影响主应用程序操作?

标签 objective-c cocoa core-foundation

我正在使用 CFMessagePort 在基于 AppKit 的应用程序中进行进程间通信,并将 CFMessagePort 源添加到当前运行循环。

CFMessagePortRef local = CFMessagePortCreateLocal( kCFAllocatorDefault, daemonHostName,didReceiveDataFromOtherProcess, NULL,false);
if (local) {
    CFRunLoopSourceRef source = CFMessagePortCreateRunLoopSource(NULL, local, 0);
    CFRunLoopRef rl = [[NSRunLoop mainRunLoop] getCFRunLoop];
    CFRunLoopAddSource(rl, source, kCFRunLoopDefaultMode);
}  
  1. 这是正确的做法吗?
  2. 我应该使用 CFRunLoopRun() 运行 runloop 吗?
  3. 这是否会影响我的主要应用程序操作(如果客户会 每 1 秒发送一次消息)?

最佳答案

  1. 我没发现有什么问题。

  2. 我从您的评论中得知您正在使用自动运行的主运行循环,因此答案是否定的。如果您没有创建运行循环,那么您绝对不需要运行它。

  3. 每秒一次根本不是问题。但是,如果 didReceiveDataFromOtherProcess() 回调需要大量时间来运行,您的界面响应速度将会降低。在这种情况下,创建一个具有自己的运行循环的辅助线程将会有所帮助。如果您不确定,请在遇到此问题之前不要担心。

附注添加源后应该释放它,因为它已被运行循环保留。

关于objective-c - 向主运行循环添加源是否会影响主应用程序操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8998648/

相关文章:

objective-c - 将 Objective-C 中字符串中的整数相加

objective-c - NSThread 和更新 subview 中的对象

iphone - 迭代效率: NSArray vs C array of pointers?

cocoa-touch - NSDate 作为 NSDictionary 的键

CFNumberFormatterCreateStringWithNumber int 问题

objective-c - 如何将经典的 HFS 路径转换为 ​​POSIX 路径

ios - 在 Objective-C 中调用 Magento SOAP API 时出错

objective-c - NSDate:获取独立于设备时钟的精确时间?

objective-c - 无法从 Cocoa 中的不同类访问变量

objective-c - cocoa 打印: Make print request percolate up to window