2017-06-26 8 views
1

ここにコードがあります。iOS CollectionコピーNSArrayとNSDictionaryの異なるアドレス

NSArray *someArray = @[@"2222"]; 
NSArray *shallowCopyArray = [someArray copyWithZone:nil]; 

NSLog(@"someArray address: %p", someArray); 
NSLog(@"shallowCopyArray address: %p", shallowCopyArray); 

NSDictionary *someDictionary = @{@"11": @"22"}; 
NSDictionary *shallowCopyDict = [[NSDictionary alloc] initWithDictionary:someDictionary copyItems:NO]; 

NSLog(@"someDictionary address: %p", someDictionary); 
NSLog(@"shallowCopyDict address: %p", shallowCopyDict); 

と私はプリントを得る:

someArray address: 0x618000000910 
shallowCopyArray address: 0x618000000910 
someDictionary address: 0x6180000227c0 
shallowCopyDict address: 0x6180000228a0 

両方NSDictionaryのは、別のアドレスを印刷している間にNSArrayが同じアドレスを印刷なぜ、浅いコピーですか?

答えて

1

コピーを作成するのに、2つの全く異なる方法を使用しています。アレイの場合は、アレイ上でcopyWithZone:を使用します。これは不変の配列なので、単にselfを返します。

辞書については、alloc/initを使用しています。これにより、新しいインスタンスが作成されますが、内容は同じです。

alloc/initをアレイで使用した場合は、おそらく新しい配列も得られます。辞書にcopyWithZone:を使用した場合、おそらく同じ辞書が戻ってくるでしょう。

+0

omg、私は全くばかげた質問をしました。 – huangxinyu

関連する問題