【问题标题】:CFMessagePortInvalidationCallBack has no context info for remote portsCFMessagePortInvalidationCallBack 没有远程端口的上下文信息
【发布时间】:2015-03-06 04:10:29
【问题描述】:

使用 CFMessagePortCreateLocal 创建本地端口时,您可以指定上下文信息 (void *)。这对于指向 Objective-C 类实例很有用。使用 CFMessagePortCreateRemote 您不能指定上下文信息。如果您希望通过 CFMessagePortSetInvalidationCallBack 指定的回调来监视远程端口何时失效,则回调中没有该信息。除了使用静态变量之外,还有其他解决方法吗?

我可能有未知数量的远程端口连接到不同的进程。

【问题讨论】:

  • 您的回调获取端口的CFMessagePortRef。您需要创建一个数据结构来跟踪您创建的远程消息端口并将其映射到其他相关数据。或者,由于所有CFType 对象都免费桥接到NSObjectid,您也许可以使用关联的对象API(例如objc_setAssociatedObject())。
  • @KenThomases 请添加您的 objc_setAssociatedObject 建议作为答案,我会将其标记为已接受的答案。它似乎完全符合我的要求。

标签: cocoa core-foundation


【解决方案1】:

由于所有CFType 对象都免费桥接到NSObjectid,因此您可以使用关联的对象API(例如objc_setAssociatedObject())。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-16
    • 1970-01-01
    相关资源
    最近更新 更多