3

David Chisnallによる" Objective-C for Java Programmers, Part 1 " のイントロでは、次のように述べられています。

常に参照によって渡されるオブジェクトとは異なり、構造体は一般的に値によって渡されます。

私はObjective-C(C++から来た)に非常に慣れていないので、これを理解するのに苦労しています。C++ では、ポインターまたは参照によって構造体を渡すことができましたが、値によって渡すことはできませんでした (おそらく非常に非効率的であるため)。

Objective-C はこれをどのように達成しますか? スタックのような方法で、すべての構造体メンバーを 1 つずつプッシュしますか?

構造が大きな/複雑なオブジェクトで構成されている場合はどうなりますか?

4

2 に答える 2

5

はい、構造全体のコピーを作成し、これを呼び出し元の関数に渡します。変更を行っても、元の構造には影響しません。欠点はもちろん遅いことですが、2 倍のスペースを消費します。

于 2012-09-28T17:32:00.547 に答える
2

すべての構造体メンバーをスタックにコピーします。構造内の複合オブジェクトは、構造へのポインターによって格納されるため、構造をコピーすると、複合型へのポイントのコピーとコピーが作成されることに注意してください。もちろん、ポインターのコピーは元のオブジェクトと同じメモリ内の場所を指すため、元のオブジェクトに対してアクションを実行します。

プリミティブ型と元の複雑なオブジェクトのコピーがある場合、このアプローチは、現在何をしているのかを知っていても、保守不可能な混乱につながります。

于 2012-09-28T17:36:00.437 に答える