13

可変データインスタンスを不変に変更するために次のことを行うのは問題ですか?

NSMutableData *mutData = [[NSMutableData alloc] init];
//Giving some value to mutData
NSData *immutableData = [NSData dataWithData:mutData];
[mutData release];
4

2 に答える 2

11

これは完全に問題なく、実際dataWithData:、可変オブジェクトの不変コピーを作成するための -- の主な用途の 1 つです。

NSDataNSCopyingプロトコル**にも準拠しています。これは、代わりに を使用できることを意味します[mutData copy]。違いは、dataWithData:所有していないオブジェクトを返すことです(自動解放されます)が、メモリ管理ルールに従って、メモリcopy担当するオブジェクトを作成します。と実質的に同等です。dataWithData:[[mutData copy] autorelease]

したがって、結果のオブジェクトの存続期間に対する要件に応じて、dataWithData:またはのいずれかを選択できます。copy


*これは、変更可能なサブクラスを持つ他のクラスの同様のメソッドにも適用されます+[NSArray arrayWithArray:]

**コア コンピテンシー ガイドの「オブジェクトのコピー」も参照してください。

于 2011-07-26T22:01:33.287 に答える
4

いいえ、問題ありません。immutableDataのデータで初期化されmutDataます。

于 2011-07-26T20:05:53.690 に答える