2012-10-22 49 views
1

我在我的objective-c应用程序(TC.h和TC.mm)中有一个C++类,它有两个方法,如下所示。将NSTimer添加到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(),我要开始的NSTimer,与NSInvocation的,以便它反复调用超时方法。 首先,这甚至是可能的。如果是这样,我会很感激任何想法或指导。

+0

你的意思是'TC :: Timeout()'? – kennytm

+0

是的。对不起..编辑问题.. – Sharath

回答

2

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

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

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

0

在这篇文章请看:

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

显然,你不能用C++写的可可应用程序完全,但有办法到C之间共享代码++和Objective C.

编辑

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

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

+0

这是一个Cocoa应用程序,即与appdelegates,Objective-C接口/实现等。其中一类必须在C++中。这个CPP类需要运行NSTimer并调用它自己的方法...类似于我发布的问题。基本上,我猜你可以将C++方法的函数指针传递给NSInvocation,从而使它成为选择器,但没有得到任何具体的例子来使用.. – Sharath

+0

编辑我的答案 – NSAddict