【问题标题】:Understanding the Objective-C event loop理解 Objective-C 事件循环
【发布时间】:2012-09-02 20:10:01
【问题描述】:

如何记录在 Objective-C 事件循环的单次迭代中发送的每条消息?

我想进一步了解 Objective-C 运行时,并认为这是一个好的开始。

【问题讨论】:

  • 我想我误读了你的问题。您想要记录对象相互发送的所有消息吗?
  • @W'rkncacnter 我只想查看在 runLoop 的一次迭代中处理的所有事件(对于初学者的主线程)。我期待看到类似“objectA 将此消息发送给 objectB,objectC 已释放...”的内容。
  • 起初我以为你只是想在每次迭代中自己做一些事情。好的,在这种情况下,您的答案已经在以下三个问题之一中:Call a macro any time any method is calledBreak on every method callTrack all method calls

标签: objective-c nsrunloop event-loop


【解决方案1】:

这些函数将根据进程的 PID 将所有消息记录到 /tmp 中的文件中。在模拟器上很好,但在 iDevice 上不行。

// Start logging all messages
instrumentObjcMessageSends(YES);

// Stop logging all messages
instrumentObjcMessageSends(NO);

【讨论】:

    【解决方案2】:

    CFRunLoopObserver opaque 类型应该完全符合您的要求。这是

    在运行的运行循环中的不同点接收回调的一般方法。

    使用its creation functionactivity 参数来指定您希望何时为观察者提供服务。对于您的情况,这可能是 kCFRunLoopEntrykCFRunLoopExit

    您可以从当前的NSRunLoop[[NSRunLoop currentRunLoop] getCFRunLoop] 或使用CFRunLoopGetCurrent() 获取CFRunLoopRef

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-15
      • 2015-12-04
      • 1970-01-01
      • 1970-01-01
      • 2011-12-13
      • 1970-01-01
      • 1970-01-01
      • 2022-01-24
      相关资源
      最近更新 更多