【问题标题】:Adding NSTimer to a C++ class将 NSTimer 添加到 C++ 类
【发布时间】:2012-10-22 10:41:26
【问题描述】:

我的 Objective-c 应用程序(TC.h 和 TC.mm)中有一个 c++ 类,它有如下两种方法。

//TC.h
class TC 
{
public:
  void SetupPollTimer();
  void Timeout();
}

//TC.mm
void TC::Timeout() 
{
    //Inside timer handler

}
void TC::SetupPollTimer() 
{
    //Setup Timer
    //Want to use NSTimer here..

}

基本上当我调用 SetupPollTimer() 时,我想用 NSInvocation 启动一个 NSTimer,以便它重复调用 Timeout 方法。 首先,这是否可能。如果是这样,我将非常感谢您对此的任何想法或指导。

【问题讨论】:

  • 是的。抱歉..编辑了问题..

标签: c++ objective-c nstimer


【解决方案1】:

在这种情况下,您只需使用等效的 CoreFoundation; CFRunLoopTimer。

使用 NSTimer 通常意味着您需要绑定 objc 对象类型来用作计时器回调的参数。

这样做,您可以将 TC 的 this 设置为计时器回调的上下文信息。然后你就可以在回调中访问你的 TC 实例了。

【讨论】:

    【解决方案2】:

    看看这篇文章:

    Use C++ with Cocoa Instead of Objective-C?

    显然,您不能完全用 C++ 编写 Cocoa-Applications,但有一些方法可以在 C++ 和 Objective C 之间共享代码。

    编辑

    好的,另一种选择是将计时器添加到处理该 CPP 文件的类中,并在 NSTimer 在处理程序文件中触发时触发 CPP 方法。

    我发现了一些在 Objective C 中使用 C++ 实例的技术,但反之则不然。

    【讨论】:

    • 这是一个 Cocoa 应用程序,即带有 appdelegates、objective-c 接口/实现等。其中一个类必须使用 C++。这个 CPP 类需要运行一个 NSTimer 并调用它自己的方法......类似于我发布的问题。基本上,我猜你可以将 c++ 方法的函数指针传递给 NSInvocation,从而使它成为选择器,但没有得到任何具体的例子来使用..
    猜你喜欢
    • 2012-04-12
    • 1970-01-01
    • 1970-01-01
    • 2013-09-21
    • 2013-06-20
    • 2012-02-13
    • 2021-11-06
    • 1970-01-01
    • 2012-06-28
    相关资源
    最近更新 更多