すべてのObjective-Cオブジェクトはポインタ(したがって*in ClassWithBigMemoryUsage *)であるため、オブジェクトは参照によって渡され、渡されたときにコピーされることを心配する必要はありません。
ただし、メソッドが実際に代入を行うときにオブジェクトがコピーされるかどうかは、明らかにsetterメソッドの実装に依存します。これを行うだけの場合:
cwbmu = assignment;
ポインタ値を設定するだけで、コピーは行われません。もちろん、それはオブジェクトなので、次のようにして、おそらくそれを保持する必要があります。
[cwbmu autorelease];
cwbmu = [assignment retain];
しかし、結果は同じです。Objective-Cインスタンスを確実に確実にコピーする唯一の方法は、明示的にcopyメッセージを送信することです。
[cwbmu autorelease];
cwbmu = [assignment copy];
そして、これはNSCopyingプロトコルに準拠するクラスでのみ機能します。
最後に、@property宣言と@synthesize'dメソッドを使用している場合は、これらの動作のどれを使用するかを指定できます。プロパティを宣言するには、次の3つの方法で、それぞれ説明されている3つの方法を使用します。
@property (assign) ClassWithBigMemoryUsage* cwbmu;
@property (retain) ClassWithBigMemoryUsage* cwbmu;
@property (copy) ClassWithBigMemoryUsage* cwbmu;
また、ARCでは、このメモリ管理は自動的に行われるため、直接制御することはできません。代わりに、weakオプション(の代わりにassign)またはオプション(のstrong代わりに)を使用しますretain。古い名前は引き続き機能しますが、新しい名前を使用すると、実際に何をしているかがより明確になります。このcopyオプションは、ARCでも引き続き有効です。
最後に、ARCを使用しているが、使用していない@property場合、インスタンス変数はデフォルトでとして管理されstrongます。__weakこれは、ivar宣言の前に付けることで変更できます。ただし、weakすべてのアーキテクチャでサポートされているわけではありません。その場合__unsafe_unretainedは代わりに使用できますが、後者の場合、割り当て解除されたオブジェクトポインタはゼロになりませnilん(に設定されます)__weak。