0

両方のクラスの変数の値を変更する機能を備えたコピーが必要なクラスがあります。簡単に言えば、これらのクラスは常に相互のクローンであり続ける必要があります。ドキュメントについての私の理解は、これも可変であると宣言されているクラスの浅いコピーを使用してこれを行うことができるということです。浅くコピーすることにより、変数のポインター値が複製され、両方のクラスで完全に一致するようになります。したがって、元の変数を更新すると、コピーも同時に更新されます。これは正しいですか?

以下に示すように、コピーしたいクラスでmutableCopyWithZoneを使用しました。これを機能させるために、NSCopyObjectメソッドとallocWithZoneメソッドの両方を試しました。クラスをコピーすることはできますが、意図したとおりに表示されますが、変数を更新しても、コピーされたクラスの値は変更されません。

- (id)mutableCopyWithZone:(NSZone *)zone {

//ReviewViewer *copy = NSCopyObject(self, 0, zone);
ReviewViewer *copy = [[[self class] allocWithZone:zone] init];
copy->infoTextViews = [infoTextViews copy];
return copy;
}

infoTextViewsは、非アトミックとして宣言されたプロパティであり、コピーされるクラスのヘッダーファイルに保持されます。それに応じて、NSMutableCopyingプロトコルも実装しました。

どんな助けでも素晴らしいでしょう。

4

2 に答える 2

1

あなたは正しいです、あなたが望むのは浅いコピーです、しかしあなたがすることは深いコピーです。[infoTextViewsコピー]を[infoTextViews保持]に変更します

小さなポイント..allocWithZone?allocWithZone:zoneという意味ですか?普通の古い割り当てはおそらく問題ないでしょう。

なぜmutableCopyWithZone:?ReviewViewerの可変バージョンと不変バージョンはありますか?あなたはおそらくcopyWithZoneが欲しいだけです:

注:copyWithZoneをオーバーライドして浅いコピーを実行する場合は、オブジェクトがコピーされるすべての場所でこの動作を指定します。

于 2010-05-26T14:26:10.440 に答える
0

2つの別々であるが同一のオブジェクトの代わりに、クラスの同じインスタンスを複数の場所で使用できないのはなぜですか?そうすれば、変更するオブジェクトは1つだけになります。コピー(深いまたは浅い)を作成すると、2つの独立したオブジェクトが作成されます。一方への変更はもう一方には反映されません。

于 2010-05-27T00:37:54.003 に答える