NSArray
/ NSDictionary
/NSSet
とそれらの変更可能なサブクラスは、オブジェクト自体ではなく、オブジェクトへのポインターを追加しただけだと思いました。
では、コンテナーに追加した後に「単純な」オブジェクトを nil に設定した場合、配列 (コンテナー) にも参照 nil がないのはなぜですか?
コードは次のとおりです。
NSMutableArray *array = [[NSMutableArray alloc] init];
Simple *simple = [[Simple alloc] init];
[array addObject:simple];
//Array sends retain, lets release
[simple release], simple = nil;
NSLog(@"Simple = \"<Simple: %p>", simple);
NSLog(@"Array: %@", array);
[array release], array = nil;
出力は次のとおりです。
2011-02-16 20:00:03.149 Allocations[5433:207] Simple = <Simple: 0x0>
2011-02-16 20:00:03.150 Allocations[5433:207] Array: (
<Simple: 0x4d3d4e0>
)