0

copy メソッドは浅いコピー、つまりコレクション自体の新しいコピーのみを作成し、内部に格納されているすべてのオブジェクトを作成するわけではありません。私が今勉強している本は、アーカイブを使用してディープ コピーを作成することを提案しています。つまり、NSKeyedArchiver を使用してコレクション オブジェクトを NSData オブジェクトに保存し、NSKeyedUnarchiver を使用して別のコレクション オブジェクトにロードします。この方法は機能しますが、大きなコレクション オブジェクトを処理するのにどれほど効率的かはわかりません。よりうまく機能する可能性のある他のディープコピー方法はありますか?

さて、これは私が知りたいことです:

  1. コーディングが少ない方法はありますか?
  2. CPU効率の良い方法はありますか?
  3. 両方を達成できる方法はありますか?:P
4

2 に答える 2

3

@dasblinkenlightが言ったこと...

NSKeyedArchiver特に大きなオブジェクトグラフ用に設計されています。もちろん、オブジェクトグラフについて高度に専門的な知識があれば、より効率的なものを構築することは可能ですが、非常に特別な問題がない限り、ほとんどの場合、それは間違いです。

あなたの本は正しいです。アーカイバを使用してディープコピーを作成します。

于 2012-07-24T15:05:10.920 に答える
1

数値はわかりませんが、NSKeyedArchiverルートの計算コストは​​それほど高くありません。それは長い道のりのように見えますが、実際にはカスタムメイドのものよりもはるかに非効率的ではありません(@Rob Napierが言ったように)。ただし、はるかに再利用可能です。

まだ疑問がある場合、興味深い実験は、大規模だが単純なデータ セットのディープ コピーであり、それをカスタムメイドのものと比較することです。

于 2012-07-25T06:18:26.943 に答える