J'espère que quelqu'un peut m'aider avec mon problème, recherché longtemps et n'a pas trouvé une réponse suffisante. J'utilise Objective-C++ pour fusionner les classes Objective C et C++ (puisque pour mon projet j'ai besoin d'hériter des classes des deux langages). Ma classe principale est une classe Objective-C et j'ai une petite classe d'aide en C++, qui est passée dans l'objet Objective-C et en appelle des fonctions.passant soi-même de l'objectif C à C++, pas plus deallocation
Mon problème est que pendant que cela fonctionne, il n'y a pas de désallocation (ou de déconstruction). Il semble que le fait de passer self dans la classe init de classe Objective-C à la classe C++ crée une sorte de verrou de mémoire ou de fuite lorsque j'essaie d'enregistrer l'objet Objective-C dans une variable de classe dans l'objet C++.
J'utilise ARC.
Voici l'exemple de code:
#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