1

現在、ディープ コピーが必要な 3 次元の NSMutableArray があります。ただし、次のコードでは、オブジェクトを削除しようとすると NSInvalidArgumentException が発生するため、コードとその内容が不変になるようです。

NSMutableArray* copy = [[[NSMutableArray alloc] initWithArray:input copyItems:YES] autorelease];

配列を不変にせずにディープコピーするにはどうすればよいですか?

4

2 に答える 2

1

リストから、

不変クラスのコピー実装は通常、同じオブジェクトを返します。これは不変であるため、「実際の」コピーを持つ必要はありません。しかし、これについて心配する必要はありません。

上記http://lists.apple.com/archives/cocoa-dev/2008/May/msg00172.htmlから

したがって、input配列を追加する前に、その入力配列を可変コピーに変換してから、メソッドを呼び出すことを確認してください。

コード:

NSMutableArray* mutableInput = [input mutableCopy];
NSMutableArray* copy = [[[NSMutableArray alloc] initWithArray:mutableInput copyItems:YES]autorelease];
于 2012-06-10T10:50:57.757 に答える
0

NSコーディングを使用する

.h ファイル内 @interface classname : NSObject

.m ファイルで

  • (id)copyWithZone:(NSZone *)ゾーン{}
于 2012-06-10T14:38:33.500 に答える