16

私は目的を持っています-いくつかの正直なC++オブジェクトポインタを含むC++クラス。

Obj-C ++クラスが破棄されると、すぐにdeallocが呼び出されますか?もしそうなら、それから置くことによってC++クラスを破壊するための最良の方法です

delete obj

Deallocメソッドで?

4

2 に答える 2

31

「Obj-C++ クラス」と言うとき、たまたまいくつかの C++ クラスを含む Objective-C クラスを意味していると思います。

Objective-C クラスは、破棄されたときに dealloc を呼び出しません。それらは、dealloc メッセージが送信されることによって破棄されます。

その少しの衒学的な方法で、init メソッドが obj をインスタンス化する場合、はい、delete objdeallocを呼び出します。

-(void)dealloc {
  delete obj;
  [super dealloc];
}
于 2010-06-28T20:15:15.503 に答える
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 docsも参照してください。

于 2010-06-28T20:28:12.837 に答える