2011-01-28 4 views
4

保持とコピーの違いは何ですか?参照カウントにはどのような意味がありますか?保持とコピーの違いは?

オブジェクトがalloc/retainを使用して割り当てられると、参照カウントは1つ増えます。 コピーを使うのはどうですか?

これに関連するもう1つの質問は、
@property(非原子的、保持)と@property(非原子的、コピー)の違いです。

+0

によって元のオブジェクトの参照カウントをincreate不変オブジェクト、ためretainに相当します。あなたは1つを選択する必要があります。 :) – Jiraheta

答えて

10

保持 - 作成されたオブジェクトには、参照カウントが増えます。

コピー -

+1

コピーも再トレイン回数を増やす – rithik

+2

@rithik:新しいオブジェクトが作成されると、保持カウントは1になります。 –

+0

copyは常に新しいオブジェクトを作成するとは限りません – newacct

3

は私の知る限り、あなたの質問に答える新しいオブジェクトを作成します。 まず、保持とコピーの違いは何ですか?参照カウントにはどのような意味がありますか?

retain - "割り当て時にオブジェクト上でretainを呼び出すように指定します。...以前の値には解放メッセージが送信されます。"したがって、NSStringインスタンス(オブジェクトであり、おそらく保持したい)を割り当てることが想像できます。したがって、保持カウントは1だけ増加します。

copy - "オブジェクトのコピーを割り当てに使用することを指定します。...以前の値にはリリースメッセージが送信されます。基本的にはretainと同じですが、-reopyではなく-copyを送信します。私が正しく覚えていれば、カウントも1ずつ上がります。

ok、もう少し詳しく説明します。

プロパティ属性は、getterとsetterの生成方法をコンパイラに指示する特別なキーワードです。ここでは2つのプロパティ属性を指定します。非構造型は、マルチスレッドを心配しないようにコンパイラに指示し、retainは、インスタンス変数を設定する前に渡された変数を保持するようにコンパイラに指示します。

他の状況では、retainの代わりに "assign"プロパティ属性を使用すると、コンパイラにはNOT!渡された変数を保持する。または、おそらく設定前に渡された変数のコピーを作成する "コピー"プロパティ属性。

私は役立つことを願っています。私はここにもあなたを助けるかもしれない別のポストを見つけました。

Objective C - Assign, Copy, Retain

乾杯! ホセ

2

一般に、元のオブジェクトと同じ値を持つ新しいオブジェクトを作成し、そしてところで1に新規作成されたオブジェクト(の参照カウントを設定し、元のオブジェクトの参照カウントがあるcopy、話します影響を受けません)。

しかし、copyはちょうどあなたが答えのいずれかを受け入れていない1.

関連する問題