【发布时间】:2017-02-20 08:41:58
【问题描述】:
我希望有人可以帮助我解决我的问题,搜索了很长时间,但没有找到足够的答案。
我正在使用 Objective-C++ 来合并 Objective C 和 C++ 类(因为对于我的项目,我需要从这两种语言继承类)。我的主类是一个 Objective-C 类,我有一个 C++ 中的小助手类,它传入 Objective-C 对象并调用它的函数。
我的问题是,虽然这有效,但不会发生解除分配(或解构)。当我尝试将 Objective-C 对象保存到 C++ 对象中的类变量时,似乎将 Objective-C 类 init 方法中的 self 传递给 C++ 类会产生某种内存锁定或泄漏。
我正在使用 ARC。
这里是示例代码:
#import <Foundation/Foundation.h>
@interface MyObjCClass : NSObject
@end
int main(int argc, const char * argv[]) {
MyObjCClass *test = [[MyObjCClass alloc] init];
test = nil;
}
class MyCppClass {
public:
MyCppClass(void *test);
~MyCppClass();
private:
void testFunction();
MyObjCClass *myObjCObject;
};
MyCppClass::MyCppClass(void *test){
MyObjCClass *obj = (__bridge MyObjCClass *) test;
myObjCObject = obj; //when doing this, there is no more deallocation/deconstruction called
NSLog(@"constructing c++ class");
}
MyCppClass::~MyCppClass(){
NSLog(@"deconstructing c++ class");
}
@implementation MyObjCClass {
MyCppClass *myCppObject;
}
- (instancetype)init
{
if (self) {
NSLog(@"initializing ObjC class");
myCppObject = new MyCppClass((__bridge void *) self);
}
return self;
}
- (void)dealloc
{
delete myCppObject;
NSLog(@"deallocating ObjC class");
}
@end
【问题讨论】:
标签: c++ objective-c memory-management self