Программирование на Objective-C 2.0
Шрифт:
Вывод программы 15.13 ======== Contents of: Linda’s Address Book == Julia Kochan jewls337@axlc.com Tony lannino tony.iannino@techfitness.com Stephen Kochan steve@kochan-wood.com Jamie Baker jbaker@kochan-wood.com ==================================================== ======== Contents of: Linda’s Address Book == Jamie Baker jbaker@kochan-wood.com Julia Kochan jewls337@axlc.com Stephen Kochan steve@kochan-wood.com Tony lannino tony.iannino@techfitness.com
Отметим, ЧТО сортировка выполняется в порядке возрастания. Вы можете выполнить сортировку в порядке убывания, внеся изменения в метод compareNames: класса AddressCard, обратив смысл возвращаемых значений.
Для работы с объектами-массивами имеется более 50 методов. В таблицах 15.4 и 15.5 приводится список наиболее распространенных методов для работы с немутабельными и мутабельными
В таблицах 15.4 и 15.5 obj, objl и объявляются произвольными объектами; / — это значение типа NSUInteger, представляющее допустимый номер элемента в массиве, selector — это объект-селектор типа SEL, size имеет тип NSUInteger.
Табл. 15.4. Наиболее распространенные методы класса NSArray Метод Описание +(id) arrayWithObjects: obj1, obj2,... nil Создает новый массив с элементами obj1, obj2, ... -(BOOL) containsObject: obj Определяет, содержится ли objв массиве (используется метод isEqual:). -(NSUInteger) count Указывает число элементов в массиве. -(NSUInteger) indexOfObject: obj Определяет номер первого элемента, содержащего obj(используется метод isEqual:). -(id) objectAtlndex: i Указывает объект, хранящийся в элементе i. -(void) makeObjectsPerformSelector: (SEL) selector Передает каждому элементу массива сообщение, которое указывает selector. -(NSArray *) sortedArrayUsingSelector: (SEL) selector Сортирует массив в соответствии с методом сравнения, который указывает selector. -(BOOL) writeToFile: path automically: (BOOL) flag Записывает массив в указанный с помощью path файл, создавая сначала временный файл, если flag имеет значение YES.
Табл. 15.5. Наиболее распространенные методы класса NSMutableArray Метод Описание +(id) array Создает пустой массив. +(id) arrayWithCapacity: size Создает массив с указанным начальным размером. -(id) initWittiCapacity: size Инициализирует новый выделенный (alloc) массив с указанным начальным размером. -(void) addObject: obj Добавляет obj в конец массива. -(void) insertObject: obj atindex: i Выполняет вставку оbj в элемент i массива. -(void) replaceObjectAtlndex: i withObject: obj Заменяет объект в элементе i массива на obj. -(void) removeObject: obj Удаляет все экземпляры obj из массива. -(void) removeObjectAtlndex: i Удаляет элемент i из массива, смещая влево все элементы, начиная с i. -(void) sortUsingSelector: (SEL)selector Сортирует массив в соответствии с методом сравнения, который указывает selector. 15.4. Объекты-словари
Словарь (dictionary) — это коллекция данных, состоящая из пар ключ-объект. Как в обычном словаре, мы получаем из словаря Objective-C значение (объект) по его кп ючу. Ключи в словаре должны быть уникальными, и они могут быть объектом любого типа, хотя обычно это строки. Значение, соответствующее ключу, тоже может быть объектом любого типа, но не должно быть значение nil.
Словари могут быть мутабельными или немутабельными; в первом случае в них можно динамически добавлять и удалять записи. В словарях можно выполнять поиск по определенному' ключу, их содержимое можно делать перечислимым. В программе 15.14 создается словарь терминов Objective-C, и в нем заполняются первые три записи.
Для использования словарей нужно включить следующую строку. #import <Foundation/NSDictionary.h> #import <Foundation/NSObject.h> #import <Foundation/NSString.h> #import <Foundation/NSDictionary.h> #import <Foundation/NSAutoreleasePool.h> int main (int argc, char *argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; NSMutableDictionary *glossary = [NSMutableDictionary dictionary]; // Сохранение трех записей в этом словаре [glossary setOhject: @"A class defined so other classes can inherit from it" forKey: @"abstract class" ]; [glossary setObject: @'To implement all the methods defined in a protocol" forKey: @"adopt"]; [glossary setObject: @''Storing an object for later use" forKey: @"archiving"]; // Их считывание и вывод NSLog (@"abstract class: %@", [glossary objectForKey: @"abstract class"]); NSLog (@"adopt: %@\ [glossary objectForKey: @"adopt"]); NSLog (@"archiving: %@", [glossary objectForKey: @"archiving"]); [pool drain]; return 0; }
Вывод программы 15.14 abstract class: A class defined so other classes can inherit from it (абстрактный класс: класс, определенный таким образом,
чтобы другие классы могли наследовать из него) adopt: То implement all the methods defined in a protocol (принять: для реализации всех методов, определенных в протоколе) archiving: Storing an object for later use (архивация: сохранение объекта для дальнейшего использования)С помощью выражения [NSMutableDictionary dictionary]
создается пустой мутабельный словарь. Мы можем добавлять в этот словарь пары ключ-значение с помощью метода setObject:forKey:. После создания словаря мы можем считывать значение для заданного ключа с помощью метода objectForKey:. В программе 15.14 показано считывание и вывод этих трех записей. В более близком к практике приложении пользователь вводит слово, и программа вы-полняет поиск определения этого слова в словаре. Перечисление записей словаря
В программе 15.15 показано, как можно определить словарь с начальными парами «ключ-значение» с помощью метода dictionaryWithObjectsAndKeys:. Мы создадим немутабельный словарь и покажем, как применяется цикл с быстрым пе-речислением для считывания каждого элемента из словаря, по одному ключу за шаг. В отличие от объектов-массивов, объекты-словари не упорядочиваются, поэтому первая пара ключ-объект, помешенная в словарь, не обязательно будет первым ключом, извлекаемым при перечислении. #import < Foundation/NSObject. h> #import <Fnunriatinn/NSString.h> #import <Foundation/NSDictionary.h> #import <Foundation/NSAutoreleasePool.h> int main (int argc, char *argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; NSDictionary *glossary = [NSDictionary dictionaryWithObjectsAndKeys: @"A class defined so other classes can inherit from it", @"abstract class", @"To implement all the methods defined in a protocol", @"adopt", @"Storing an object for later use", @"archiving", nil ]; // Вывод всех пар ключ-значение из словаря for ( NSString *key in glossary) NSLog (@"%@%@\ key, (glossary objectForKey: key]); [pool drain]; return 0; }
Вывод программы 15.15 abstract class: A class defined so other classes can inherit from it adopt: To implement all the methods defined in a protocol archiving: Storing an object for later use
Аргументом для метода dictionaryWithObjectsAndKeys: является список пар объектключ (именно в этом порядке), разделяемых запятой. Этот список должен заканчиваться специальным объектом nil.
После создания словаря в цикле перечисляется его содержимое. Как уже говорилось, ключи считываются из словаря по очереди, без специального порядка. Если требуется вывести содержимое словаря в алфавитном порядке, можно прочитать все ключи из словаря, отсортировать их и затем считывать по порядку все значения для отсортированных ключей. Половину этой работы выполняет для вас метод keysSortedByValueUsingSelector:, возвращая отсортированные ключи в виде массива в соответствии с критериями сортировки.
Мы только что показали некоторые базовые операции со словарями. В таб-лицах 15.6 и 15.7 приводятся наиболее распространенные методы для работы с немутабельными и мутабельными словарями. Поскольку NSMutableDictionary яв-ляется подмножеством IMSDictionary, он наследует его методы.
В таблицах 15.6 и 15.7 ключи и объекты key, keyl, кеу2, nhj, ohjl и ohj2 — про-извольные объекты, и size — целое без знака (unsigned int) типа NSUInteger.
Табл. 15.6. Наиболее распространенные методы класса NSDictionary Метод Описание– (NSArray *) keysSortedByValueUsingSelector: (SEL) selector Возвращает массив ключей из словаря, отсортированных в соответствии с методом сравнения, который указывает селектор selector. -(NSEnumerator *) objectEnumerator Возвращает объект класса NSEnumerator для всех значений из словаря -(id) objectForKey: key Возвращает объект для указанного ключа key.
Табл. 15.7. Наиболее распространенные методы класса NSMutableDictionary Метод Описание +(id) dictionaryWitb Capacity: size Создает мутабельный словарь с указанным начальным размером size. -(id) initWithCapacity: size Инициализирует новый выделенный (alloc) словарь с указанным начальным размером size. -(void) removeAHObjects Удаляет все записи из словаря. -(void) removeObjectForKey: key Удаляет из словаря запись с указанным ключом key. -(void) setObject: objforKey: key Добавляет в словарь obj для ключа key и заменяет значение, если этот ключ уже существует. 15.5. Объекты-наборы