5

Objective-C メソッドは「値渡し」をサポートしていますか? または、より具体的に言うと、次のようになります。

  1. メソッドに渡されるパラメーターの既定の動作は参照渡しですか?
  2. はいの場合、状況によっては、これとは異なるものがありますか? たとえば、パラメーターがオブジェクトではなく基本的な int である場合などです。(または、これは目的 c には関係ありません)
  3. int などの基本変数の値渡しをサポートするメソッドを持つ方法はありますか?
  4. メソッドがオブジェクトの値渡しをサポートする方法はありますか? (ここではノーと仮定しますが、完全を期すために尋ねます。もちろん、メッセージ内で自分でコピーを作成することもできますが、このアプローチでは、これは客観的な c メソッドが提供するものではないと考えます。自作です)

ありがとう

4

2 に答える 2

8

Objective-C は、少なくとも C++ という用語の意味では、参照をサポートしていません。

すべての Objective-C オブジェクトはヒープに割り当てられるため、実際にはすべての「オブジェクト変数」はポインター型でなければなりません。ポインターが事実上参照と同等であると見なすことができるかどうかは、議論の余地があります。たとえば、C++ について話す場合、明確な意味上の違いがあります (そうでなければ、何がポイントなのか...)

だからあなたの質問に答えるために:

  1. いいえ、Objective-C は値渡しのみをサポートしています。メソッドにオブジェクト ポインターを渡す場合は、ポインターを値で渡します。つまり、参照を渡しているわけではありません。
  2. この点に関して、オブジェクトとプリミティブの間に固有の違いはありません。ただし、オブジェクトは常にポインターによって参照され、値によって参照されることはありません。必要に応じて、プリミティブ型ポインターを渡すことができます。
  3. はい。これは常に当てはまります。繰り返しになりますが、プリミティブへのポインターを渡す場合は、ポインターを参照ではなく値で渡します。
  4. あなたは、参照ではなくポインタを渡しているという事実を除けば、これでかなりの成功を収めています。
于 2011-03-09T20:37:04.757 に答える
5
  1. いいえ。C のように、デフォルトでは値渡しです。Objective C クラス インスタンス参照の場合、値は参照であるという事実を除いては。したがって、Objective C クラスのインスタンスは実質的に参照によって渡されます。

  2. なし

  3. 1を参照してください。

  4. あまり。シリアル化して文字列を渡し、内部で再作成できます。または、オブジェクトに ivar を構造体として格納させ、その構造体を値渡しすることもできます。一部のオブジェクトは複製をサポートしています。

于 2011-03-09T20:28:09.277 に答える