可変データインスタンスを不変に変更するために次のことを行うのは問題ですか?
NSMutableData *mutData = [[NSMutableData alloc] init];
//Giving some value to mutData
NSData *immutableData = [NSData dataWithData:mutData];
[mutData release];
可変データインスタンスを不変に変更するために次のことを行うのは問題ですか?
NSMutableData *mutData = [[NSMutableData alloc] init];
//Giving some value to mutData
NSData *immutableData = [NSData dataWithData:mutData];
[mutData release];
これは完全に問題なく、実際dataWithData:
、可変オブジェクトの不変コピーを作成するための -- の主な用途の 1 つです。
NSData
NSCopying
プロトコル**にも準拠しています。これは、代わりに を使用できることを意味します[mutData copy]
。違いは、dataWithData:
所有していないオブジェクトを返すことです(自動解放されます)が、メモリ管理ルールに従って、メモリをcopy
担当するオブジェクトを作成します。と実質的に同等です。dataWithData:
[[mutData copy] autorelease]
したがって、結果のオブジェクトの存続期間に対する要件に応じて、dataWithData:
またはのいずれかを選択できます。copy
*これは、変更可能なサブクラスを持つ他のクラスの同様のメソッドにも適用されます+[NSArray arrayWithArray:]
。
**コア コンピテンシー ガイドの「オブジェクトのコピー」も参照してください。
いいえ、問題ありません。immutableData
のデータで初期化されmutData
ます。