我有一个objective-C++ 类,其中包含一些诚实的C++ 对象指针。
当 Obj-C++ 类被销毁时,它会立即调用 dealloc 吗?如果是这样,那么是通过放置来破坏 C++ 类的最佳方法
delete obj
在dealloc方法中?
我有一个objective-C++ 类,其中包含一些诚实的C++ 对象指针。
当 Obj-C++ 类被销毁时,它会立即调用 dealloc 吗?如果是这样,那么是通过放置来破坏 C++ 类的最佳方法
delete obj
在dealloc方法中?
我想当你说“Obj-C++ 类”时,你的意思是一个恰好包含一些 C++ 类的 Objective-C 类。
Objective-C 类在销毁时不会调用 dealloc;他们通过将 dealloc 消息发送给他们而被销毁。
有了一点迂腐,如果你的 init 方法实例化了 obj,那么,是delete obj
的,调用 dealloc:
-(void)dealloc {
delete obj;
[super dealloc];
}
作为 Frank Shearar 正确答案的补充,如果您使用的是 OSX 10.4 或更高版本的 SDK(您可能是;虽然我不确定这里的 iPhone 运行时),您还可以包含 Objective-C 类的 C++ 成员,即无需借助指针。早期版本的 OSX SDK 中的问题是 C++ 成员的构造函数和析构函数根本不会被调用。但是,通过指定fobjc-call-cxx-cdtors
编译器选项(在 XCode 中它作为设置公开GCC_OBJC_CALL_CXX_CDTORS
),ctor 和 dtor 将被调用。另请参阅Apple docs,在该页面下方。