【发布时间】:2014-03-24 09:19:23
【问题描述】:
好的,首先,我必须承认这是我第一次接触 C++。清除后,我想继续。问题就这么简单,但有一些(奇怪的)扭曲。我正在尝试将 C++ 库包装到 Objective-C 代码中。假设名为“my_class”的C++类有一个方法“get_string”,它返回另一个类“my_second_class”,它有一个名为“my_string”的方法,它返回一个std::string,我想把它放入属性NSString为我的 Obj-C 类“MyClass”命名为“MyNSString”。
这是代码。我跳过了包含/导入和“使用命名空间”部分。它们存在。
MyClass.h
@interface Torrent : NSObject {
my_class myCls;
@property NSString *MyNSString;
- (instancetype)initWithHandle:(void*)handle;
- (void)setInfo;
@end
MyClass.m
@implementation MyClass
@synthesize MyNSString;
- (instancetype)initWithHandle:(void*)handle {
self = [super init];
if (self) {
myCls = static_cast<my_class*>(handle);
if (! myCls->is_valid()) return nil;
[self setInfo];
}
return self;
}
我还没有实现 setInfo。这就是错误开始的地方。因此,我将详细介绍我针对该问题所做的每一次尝试。
尝试 #1
- (void)setInfo {
my_second_class mySecCls = myCls->get_string();
MyNSString = @(mySecCls.my_string().c_str());
}
尝试 #2
- (void)setInfo {
MyNSString = @(myCls->get_string().my_string().c_str());
}
尝试 #3
- (void)setInfo {
my_second_class mySecCls = myCls->get_string();
NSString *unusedString = @(mySecCls.my_string().c_str());
}
尝试#1 失败,#2 和#3 成功。 我还必须提到,有大约 75 个这样的值需要每秒钟更新一次(我在代码中使用 NSTimer),所以尝试 #2 会影响性能。 #3 显然没用,但不知何故,它起作用了。我想知道为什么 #1 失败,而 #3 和 #2 成功。
如果有人能给我一些适中(不太大也不太小)Objective-C++ 代码的链接,我将不胜感激。
编辑: 尝试 #1 导致 EXC_BAD_ACCESS 代码=1
谢谢。
【问题讨论】:
-
请发布您的 C++ 类的代码
-
另外,尝试 #2 的性能如何低于 #1?
-
如果我在这里错了,请纠正我,但我假设更多的调用 = 更少的性能。所以,object = anotherObject.getObject; property1 = object.prop1;属性2 = object.prop2;优于 property1 = anotherObject.getObject.prop1; property2 = anotherObject.getObject.prop2;
标签: c++ objective-c xcode5 objective-c++