3

私はいくつかの iOS アプリケーションを作成しており、目的の c オブジェクトを c++ クラスに含めるかどうかの決定に直面しています。インターネットで何時間も検索した後、objective-c の c++ クラスの使用 (「使用」の代わりに「ラッピング」を使用することもあります) の使用に関する議論を見つけましたが、反対は非常に限られています。だから私の最初の質問は、c ++クラスにobjective-cデータメンバーを持つことは適切であると考えられていますか(時には必要/便利でさえありますか)?

これがiOSアプリの作成における非常に通常の方法である場合、メモリに関して、1) ARCを使用し、2) MRCを使用して、c++クラスでobjective-cデータメンバーを管理するにはどうすればよいですか? 特に、目的の c メンバを持つ c++ クラスのコンストラクタとデストラクタを正しく記述するために知っておくべき経験則はありますか?

4

1 に答える 1

2

はい、できます。それは珍しいことではありません。

  1. ARC の場合: 使用するだけで機能します。コンストラクタやデストラクタを持たないクラス (「POD」クラス) 内に Objective-C データ メンバを配置すると、その定義が ARC と MRC コードの両方にインポートされると問題が発生するため、警告が表示されることに注意してください。その場合の解決策は、ダミーのコンストラクタまたはデストラクタを追加することです。

  2. MRC の場合: インスタンス変数の通常の MRC メモリ管理規則に従って、保持および解放する必要があります。つまり、割り当てた場合は、必ず前の値を解放して新しい値を保持してください。クラスのデストラクタ (デストラクタがない場合は追加) で、それを解放する必要があります。nilまた、コンストラクターでは、C/C++ のポインターは自動的に初期化されないため、オブジェクト ポインター (またはその他の値)を必ず初期化してください。

于 2013-07-17T05:55:27.853 に答える