2010-09-01 3 views
1

[Я прочитал правило управления какао памяти, но все еще хочу быть уверены, и хотел бы знать, если это хорошая форма.]Какао - NSDictionary objectForKey - управление памятью уточнение

Моего класса имеет изменяемый словарь Ивар:

NSMutableDictionary *m_Dict; 

... 

m_Dict = [NSMutableDictionary dictionaryWithCapacity:10]; 
[m_Dict retain]; 

в какой-то момент я добавлю изменяемый массив в словарь:

NSMutableArray *array = [NSMutableArray arrayWithCapacity:100]; 
[m_Dict setObject:array forKey: @"myArray"]; 

на данный момент, я считаю, что объект массива был сохранен в словаре. Поэтому я не сохраняю объект перед его добавлением в словарь. Это верно?

Позже я получить доступ к массиву, для целей чтения:

NSMutableArray *array = [m_Dict objectForKey: @"myArray"]; 

Q1. Что возвращает объектForKey? Является ли это указателем на объект, который хранится в словаре? Или указатель на КОПИЮ объекта? (Я предполагаю, что просто указатель на существующий объект возвращается.)

Q2. Что здесь произошло, управление памятью мудро? Я предполагаю, что «массив» указывает на объект, который все еще сохранил (по собственному объекту словаря) и что мне не нужно сохранять объект для работы с ним. Верный?

Спасибо.

ответ

5

Q1) Возвращается тот же указатель на массив Objective-C, который вы добавили ранее. Никакой копии не производится.

Q2) Правильно. Все элементы массива принадлежат массиву. Если что-то владеет чем-то другим, он удерживает на нем счет.

Когда вы удаляете объект из массива, количество удержания уменьшается и объект (возможно) освобождается.

+0

Спасибо, сейчас намного яснее. – SirRatty

Смежные вопросы