4

保持とコピーの違いは何ですか?参照カウントにおけるその重要性は何ですか?

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

これに関するもう 1 つの質問は、
@property(nonatomic、retain) と @property(nonatomic、copy) の使用の違いですか?

4

3 に答える 3

10

保持 -- 作成されたオブジェクトに対して行われ、参照カウントが増えるだけです。

copy -- 新しいオブジェクトを作成します

于 2011-01-28T11:13:18.473 に答える
3

私の知る限りであなたの質問に答えます。まず、retain と copy の違いは何ですか? 参照カウントにおけるその重要性は何ですか?

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

copy - 「オブジェクトのコピーを割り当てに使用する必要があることを指定します。... 以前の値が解放メッセージとして送信されます。」基本的には保持と同じですが、-retain ではなく -copy を送信します。私の記憶が正しければ、カウントも 1 増加します。

わかりました、今より詳細に行きます。

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

別の状況では、retain の代わりに「assign」プロパティ属性を使用することをお勧めします。渡された変数を保持します。あるいは、渡された変数のコピーを設定前に作成する「copy」プロパティ属性かもしれません。

それが役立つことを願っています。ここで、あなたにも役立つ別の投稿を見つけました。

目標 C - 割り当て、コピー、保持

乾杯!ホセ

于 2012-03-16T14:57:55.023 に答える
2

一般的にはcopy、元のオブジェクトと同じ値を持つ新しいオブジェクトを作成し、新しく作成されたオブジェクトの参照カウントを 1 に設定します (ちなみに、元のオブジェクトの参照カウントには影響しません)。

ただし、元のオブジェクトの参照カウントを 1 増やすだけの不変オブジェクトの場合copyと同等です。retain

于 2013-05-07T04:31:23.320 に答える