0

我有这样的事情:

// main.m
@interface MYView : UIView { @public int counter; } @end;
@implementation MYView 
- (void)drawRect:(CGRect)rect {
}
@end

现在我想从这里的实现中删除 drawRect 方法(或任何其他方法),并将其移动到 C++ 文件实用程序.cpp。

我需要这个的原因是我必须使用一些不能在 Objective-C++ 中编译的 C++ 库。而且我需要大量使用该库,这样来回切换并不方便。

我知道我可以简单地做到这一点:

- (void)drawRect:(CGRect)rect {
    call_cpp_function(rect);
}

但也许我可以在 C++ 中完全定义该方法?像这样的东西:

void __magic_declaration__ MYView::drawRect(CPPTYPE(CGRect))
// note, this line is completely my own imagination, this is just to illustrate what I want.
4

2 回答 2

3

这是可能的,如果不是你所说的令人愉快的话。请参阅这个答案,其中视图是用纯 C 构建和绘制的。

于 2013-04-29T09:20:24.950 回答
2

你不能这样做。正如您所提到的,您可以获得的最接近的方法是从 ObjC 方法调用 C++ 代码。

从技术上讲,您可能能够使用 ObjC 运行时 API 动态添加方法,但这会更笨重、更难、更慢。

于 2013-04-29T08:41:05.003 回答