ПРОГРАММИРОВАНИЕ ПОД IPHONE, IPAD OBJECTIVE-C Часть 1

NSMutableDictionary (изменяемые словари)

Если вы читали предыдущие статьи — то уже заметили, что приставка в имени класса Mutable означает, что экземпляры данного класса модифицируемы. У класса NSDictionary так же есть сабклас, который позволяет редактировать свои экземпляры, это классNSMutableDictionary.

Для проведения испытаний над методами этого класса создадим новый проект на основе представления (View-based Application) и назовите его MutableDictionarys. Теперь откройте файл MutableDictionarysViewController.m и раскомментируйте в нем методviewDidLoad. Затем добавьте в него следующий код:

<code data-result="[object Object]">NSMutableDictionary *d1 = [NSMutableDictionary dictionaryWithCapacity:2];
NSMutableDictionary *d2 = [[NSMutableDictionary alloc] initWithCapacity:2];
[d2 release];</code>

В первой строке мы создаем новый словарь, цифра 2, которую мы указываем в параметре метода инициализации, как и в случае с классами NSMutableString и NSMutableArray означает сколько объектов мы будем хранить в данном словаре. Значение этого параметра не ограничивает величину словаря, оно необходимо лишь для оптимизации выделения памяти компилятором. В следующей строке мы так же создаем словарь, но уже сами контролируем процесс выделения и очистки памяти для него.

Теперь давайте попробуем добавить значения в только что созданный словарь.

<code data-result="[object Object]">[d1 setObject:@"String constant" forKey:@"string"];
NSLog(@"%@", d1);</code>

В первом параметре метода setObject мы указываем значение, которое хотим добавить, а во втором — ключ, по которому будем обращаться к этому значению. Ниже приведен результат работы этого кода.

2011-03-19 12:55:28.407 MutableDictionarys[1811:207] {

    string = «String constant»;

}

Давайте теперь посмотрим, что будет, если под уже имеющимся ключом записать новое значение.

<code data-result="[object Object]">[d1 setObject:@"New value" forKey:@"string"];
NSLog(@"%@", d1);</code>

Мы увидим, что старое значение заменилось новым. То есть, в отдельно взятом словаре каждый ключ должен быть уникальным. Это следует учитывать при написании конкретных программ.

Следующий код демонстрирует процесс добавления записей одного словаря в другой.

<code data-result="[object Object]">NSDictionary *d = [NSDictionary dictionaryWithObjectsAndKeys:
                   @"Shane Stanley", @"name",
                   @"Russia", @"country",
                   nil];
[d1 addEntriesFromDictionary:d];
NSLog(@"%@", d1);</code>

Для замены всех значений сходного словаря значениями нового используется метод setDictionary.

<code data-result="[object Object]">NSDictionary *d3 = [NSDictionary dictionaryWithObjectsAndKeys:
                    @"Sara Konor", @"name",
                    @"USA", @"country",
                    @"111-555-1212", @"phone",
                    @"sk@gmail.com", @"email",
                    @"Programmer", @"profession",
                    nil];
[d1 setDictionary:d3];
NSLog(@"%@", d1);</code>

Как видите все значения заменились:

2011-03-19 12:55:28.413 MutableDictionarys[1811:207] {

    country = USA;

    email = «sk@gmail.com»;

    name = «Sara Konor»;

    phone = «111-555-1212»;

    profession = Programmer;

}

Зная ключ объекта — его можно удалить с исходного словаря.

<code data-result="[object Object]">[d1 removeObjectForKey:@"country"];
NSLog(@"%@", d1);</code>

Так же есть возможность поместить ключи, объекты которых мы хотим удалить в массив, а затем удалить эти объекты.

<code data-result="[object Object]">NSArray *keysForRemove = [NSArray arrayWithObjects:@"phone", @"email", @"profession", nil];
[d1 removeObjectsForKeys:keysForRemove];
NSLog(@"%@", d1);</code>

Последний метод, о котором хотелось бы сказать — это метод очистки словаря.

<code data-result="[object Object]">[d1 removeAllObjects];
NSLog(@"%@", d1);</code>

В этой статье я продемонстрировал основные методы класса NSMutableDictionary. Если у вас возникают вопросы — можете смело их задавать в комментариях и я буду дополнять статью.

 

Исходный код можно скачать здесь.

Comments are closed.