私はCocoaとObjectiveC:Up and Runningを読みました。これ-copy
は常に不変オブジェクトを-mutableCopy
返し、常に可変オブジェクトを返します。
可変オブジェクトを呼び出す
-copy
と、不変バージョンが返されることを知っておくことが重要です。可変オブジェクトをコピーして新しいバージョンで可変性を維持したい場合は-mutableCopy
、元のオブジェクトを呼び出す必要があります。ただし、これは便利です。可変オブジェクトを「フリーズ」したい場合は、-copy
それを呼び出すだけでよいからです。
だから私はこのようなものを持っています:
NSMutableURLRequest *req = [[NSMutableURLRequest alloc] init];
NSLog( @"%@", [req className] ); // NSMutableURLRequest
NSLog( @"%@", [[req copy] className] ); // NSMutableURLRequest
NSLog( @"%@", [[req mutableCopy] className] ); // NSMutableURLRequest
この前の答えによると:
コピーの結果が変更可能であると信頼することはできません。をコピーすると、元のクラスであるため、
NSMutableArray
が返される場合がありますがNSMutableArray
、任意のNSArray
インスタンスをコピーすると返されません。
意図したとおりに機能するためNSURLRequest
、これはやや孤立しているようです。NSArray
NSArray *arr = [[NSMutableArray alloc] init];
NSLog( @"%@", [arr className] ); // __NSArrayM
NSLog( @"%@", [[arr copy] className] ); // __NSAraryI
NSLog( @"%@", [[array mutableCopy] className] ); // __NSArrayM
それで...
-copy
(期待どおりに)不変オブジェクトを返すのはいつですか?また、可変オブジェクトを返すのはいつですか?- 「凍結」を拒否する可変オブジェクトの「凍結」コピーを取得するという意図された効果をどのように達成しますか?