Главная » iPhone, Objective-C, Программирование для iOS и MacOS » NSArray Objective-C

0

Класс NSArray, как и NSString, часто используется программистами Objective-C. В экземпляре NSArray хранится список указателей на другие объекты. Предположим, вы хотите создать список из трех объектов NSDate, а потом перебрать их и вы вести каждую из хранящихся в них дат.

Создайте новый проект: программу командной строки Foundation с именем

DateList. Откройте файл main.m и отредактируйте функцию main():

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])

{

@autoreleasepool {

// создание трех объектов NSDate NSDate *now = [NSDate date];

NSDate *tomorrow = [now dateByAddingTimeInterval:24.0 * 60.0 * 60.0]; NSDate *yesterday = [now dateByAddingTimeInterval:-­‐24.0 * 60.0 * 60.0];

nil];

// создание массива, содержащего все три объекта

NSArray *dateList = [NSArray arrayWithObjects:now, tomorrow, yesterday,

// Сколько объектов содержит список? NSLog(@"There are %lu dates", [dateList count]);

// вывод содержимого пары объектов

NSLog(@"The first date is %@", [dateList objectAtIndex:0]); NSLog(@"The third date is %@", [dateList objectAtIndex:2]);

}

return 0;

}

Класс  NSArray содержит  два  метода,  представленных  в  этом  примере,

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

•  count: возвращает количество элементов в массиве:

•  objectAtlndex:    возвращает    указатель,    хранящийся    в    массиве    по    индексу, заданному в аргументе.

Элементы массива хранится в заданном порядке, к ним можно обращаться по индексу. Нумерация индексов начинается с нуля: первый элемент хранится с индексом 0, второй – с индексом 1 и т. д. Таким образом, если метод count сообщает, что массив

содержит  100  элементов,  вы  можете  использовать  objectAtlndex:  для  запроса объектов с индексами от 0 до 99.

На рис. 15.1 изображена диаграмма объектов программы. Обратите внимание:

экземпляр NSArray содержит указатели па объекты NSDate.

Рис. 15.1. Диаграмма объектов приложения DateList

Для перебора и поочередной обработки всех элементов массива используется цикл for. Отредактируйте файл main.m:

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])

{

@autoreleasepool {

// создание трех объектов NSDate NSDate *now = [NSDate date];

NSDate *tomorrow = [now dateByAddingTimeInterval:24.0 * 60.0 * 60.0]; NSDate *yesterday = [now dateByAddingTimeInterval:-­‐24.0 * 60.0 * 60.0];

nil];

// создание массива, содержащего все три объекта

// nil -­‐  признак конца списка

NSArray *dateList = [NSArray arrayWithObjects:now, tomorrow, yesterday,

NSUInteger dateCount = [dateList count]; for (int i = 0; i < dateCount; i++) {

NSDate *d = [dateList objectAtIndex:i]; NSLog(@"Here is a date: %@", d);

}

}

return 0;

}

Программистам так часто приходится решать задачу перебора массивов, ЧТО

для  нее  было  создано  специальное  расширение  цикла  for (синтаксис  быстрого перечисления) Внесите в код следующие изменения:

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])

{

@autoreleasepool {

// создание трех объектов NSDate NSDate *now = [NSDate date];

NSDate *tomorrow = [now dateByAddingTimeInterval:24.0 * 60.0 * 60.0]; NSDate *yesterday = [now dateByAddingTimeInterval:-­‐24.0 * 60.0 * 60.0];

nil];

// создание массива, содержащего все три объекта

// nil -­‐  признак конца списка

NSArray *dateList = [NSArray arrayWithObjects:now, tomorrow, yesterday,

for (NSDate *d in dateList) { NSLog(@"Here is a date: %@", d);

}

}

return 0;

}

Подобные циклы являются исключительно эффективным способом перебора

элементов  массива.  Существует  единственное  ограничение:  в  процессе  перебора запрещено добавлять или удалять элементы из массива.

Источник: Аарон Хилегас, «Objective-C. Программирование для iOS и MacOS», 2012 г.

По теме:

  • Комментарии