如何从目标c类调用.mm文件的方法
问题描述:
我正在研究iPhone应用程序。我需要在.mm文件中调用一个方法。这个问题在这里被简化的版本:如何从目标c类调用.mm文件的方法
ViewHelper.h
- (void)testMtd;
ViewHelper.mm(注意这是.mm)
- (void)testMtd{
NSLog(@"Call reached mm");
}
SomeViewController.m(进口为了清楚起见省略了查看帮助h)
- (void)someCallerMtd{
NSLog(@"before");
[viewHelper testMtd]; //call does not work
NSLog(@"after");
}
我在日志中看到“之前”和“之后”,但“Call reached mm”永远不会打印。在.mm文件中是否有特殊的规则调用obj c方法?我在这里错过了什么?
答
首先,它与.mm
文件无关,它仍然是客观的。其次,您的错误不是分配ViewHelper
。
解决方案是公开分配您的ViewHelper
或制作(void)testMtd
。取决于你的需求。
要么改变你的SomeViewController.m
:
- (void)someCallerMtd{
NSLog(@"before");
viewHelper = [[ViewHelper alloc] init];
[viewHelper testMtd];
[viewHelper release];
NSLog(@"after");
}
或更改ViewHelper
:
//ViewHelper.h
+ (void)testMtd;
//ViewHelper.mm
+ (void)testMtd{
NSLog(@"Call reached mm");
}
- (void)someCallerMtd{
NSLog(@"before");
[ViewHelper testMtd]; //remember to use ViewHelper class. not viewhelper.
NSLog(@"after");
}
答
-testMtd
方法永远不会调用的最可能原因是viewHelper
为零。确保它指向ViewHelper类的有效实例。在Objective-C中将消息发送给零指针是合法的,但在这种情况下将不会调用任何方法。
你是如何声明和初始化'viewHelper'? – sch 2012-02-26 10:36:09
另外需要注意的是,如果你在**。mm **文件中编写你的类,它仍然是一个正常的Objective-C类。唯一改变的是你可以在**。mm **文件中调用C++代码。 – sch 2012-02-26 11:23:58
@sch是我错过了初始部分!感谢您的指示和澄清reg .mm – Ravi 2012-02-27 01:46:31