Objective-C++中的析构函数

Joh*_*ith 15 cocoa objective-c objective-c++

我有一个Objective-C++类,它包含一些诚实的C++对象指针.

当Obj-C++类被销毁时,它会立即调用dealloc吗?如果是这样,那么通过put来破坏C++类是最好的方法

delete obj
Run Code Online (Sandbox Code Playgroud)

在dealloc方法?

Fra*_*rar 26

我假设当你说"Obj-C++类"时,你的意思是一个恰好包含一些C++类的Objective-C类.

Objective-C类在被销毁时不会调用dealloc; 通过发送dealloc消息来销毁它们.

如果你的init方法实例化了obj,那么,是的,delete obj在dealloc中调用:

-(void)dealloc {
  delete obj;
  [super dealloc];
}
Run Code Online (Sandbox Code Playgroud)

  • ARC禁止发送dealloc消息 - 当使用ARC时,无需调用`[super dealloc]`[这里](http://stackoverflow.com/questions/7292119/custom-dealloc-using-arc-objective-c) (7认同)
  • @benjineer ARC 在写这个答案时还没有发布,但你是对的,`[super dealloc]` 与 ARC 不兼容。 (2认同)

har*_*rms 8

作为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文档,在该页面下方.