2011-04-11 9 views
0

私は、インスタンス変数にアクセスする必要があるいくつかのC関数を持っています。私はすでに関数の引数として構造体を渡しています。そこで、構造体のivarsへのポインタを追加しました。これは安全ですか? (Objective Cのインスタンス変数へのポインタ)

は、アプリの一生有効な残りのポインタに依存することは安全です(私は保持し、賢明にリリースすると仮定すると?)

答えて

1

それが指すものは有効なままでポインタが限り有効です。 ivarsを含むオブジェクトが解放され、他の誰かがまだivarsの1つへのポインタを使用しようとしている場合、ええ、それは爆発するでしょう。

つまり、必要に応じて実際の値を取得して設定するほうがよいかもしれません。イヴァールはそれほど大きくはないので、にはが必要です。そうすることで、すべてのカプセル化の概念が破られ、すべてのオブジェクトの存続期間が一致するようにエラーが発生しやすくなります。より幅広いデザインアドバイスが必要な場合は、もっとお気軽に、または別の質問をしてください。

+0

ありがとう、私はObjective-CとCに関する良いオブジェクト指向設計を本当に理解する必要があると思う。Obj-Cで基本的なことを考えると思うが、構造体とC関数を混ぜると、 。私はレンダリングコールバックで作業する必要があります。コールバックは構造体を受け取り、その構造体からの情報を持つC関数を呼び出します。私はコールバック内から呼び出されたメソッドでivar値が必要です。 fun fun fun – griotspeak

+0

@griotspeak:なぜ、実際のObj-Cオブジェクトへの参照を渡さないで、内部のC関数を呼び出すときに気にするプロパティを引き出すのはなぜですか? (または、値を更新する必要がない場合は、事前にすべての値を取り出し、コールバックで終了する構造体に追加しますか?非同期コールバックでは、オブジェクトのプライベートivarsを直接指し示すことは非常に脆弱です。 –

+0

私はコールバックでobj-C呼び出しを行うことができません。それは時間がかかり、オーディオの不具合が発生します。値の代わりにivarへのポインタを追加した後の考えは、2つの構造体が関与しており、私はこれの間にあり、値を渡すだけです。ありがとうagain – griotspeak

関連する問題