2013-05-21 1 views
0

Добавляет ли NSMutableDictionary в NSMutableDictionary копию или сохраняет указатель.Добавляет ли NSMutableDictionary в NSMutableDictionary копию или сохраняет указатель

Я хочу, чтобы иметь возможность обновлять содержимое первого NSMutableDictionary и есть, что отслеживаются в другой NSMutableDictionary - например ...

NSMutableDictionary* dictA = [[NSMutableDictionary alloc] init]; 
    NSMutableDictionary* dictB = [[NSMutableDictionary alloc] init]; 
    [dictA setValue:[NSNumber numberWithInt:1 ] forKey:@"number"]; 
    [dictB setValue:dictA forKey:@"dictA"]; 

    [dictA setValue:[NSNumber numberWithInt:2 ] forKey:@"number"]; 

Will dictB.dictA.number Теперь = 2?

+5

Ну, я могу думать об одном очень хорошем способе, чтобы узнать. Попробуй. – picciano

+0

Сохраняет указатель. Изменение внутреннего словаря приведет к изменениям, видимым через внешний словарь. –

ответ

2

Да, это будет. В общем, классы коллекции Cocoa сохраняют только добавленные к ним объекты (цель: таким образом вы также можете вставлять объекты, не подлежащие копированию).

(С CoreFoundation обмана и бесплатным шунтирование, можно реализовать NSArray, который копирует ее элементы, хотя.)

+0

Основной причиной не всегда копирования является то, что было бы невероятно неэффективно, во времени и пространстве, сделать это. –

+0

@HotLicks это еще одна веская причина, но я не думаю, что стоит спорить о том, какая причина важнее. Например, копирование «NSNumber», хранящегося в указателе с тегами, представляет собой только одну инструкцию «MOV» (или что-то еще). –

+0

Объекты NSNumber неизменяемы и не требуют копирования. Они также невероятно малы. Для сравнения, NSMutableDictionary огромен, и если каждая ссылка на одну сделала копию, копии быстро уничтожат все хранилище. –