好的,首先,我必須承認這是我第一次使用C++。隨着清除,我想繼續。問題就這麼簡單,但帶有一些(奇怪的)轉折點。我正在嘗試將C++庫封裝到Objective-C代碼中。假設名爲「my_class」的C++類有一個方法「get_string」,它返回另一個類「my_second_class」,它有一個名爲「my_string」的方法,該方法返回一個std :: string,我想把它放入一個屬性NSString爲我的Obj-C類「MyClass」命名爲「MyNSString」。Objective-C++將值分配給C++對象的OBj-C屬性
這是代碼。我跳過了includes/imports和'using namespace'部分。它們存在。
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; property2 = object.prop2;比property1 = anotherObject.getObject.prop1更好; property2 = anotherObject.getObject.prop2; –