Записки Junior-а: советы по работе с массивами NSArray

Записки Junior-а: советы по работе с массивами NSArray

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

Итак, я покажу 3 способа, как просматривать массив поэлементно. И расположу свои советы в порядке увеличения производительности.

Способ 1, стандартный:

for (int i = 0; i < arrayURL.count; i++) {
    NSLog(@"%i. %@", i + 1, arrayURL[i]);
}

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

Способ 2:

for (NSNumber *url in arrayURL) {
    NSLog(@"%i. %@", [arrayURL indexOfObject:url], url);
}

В данном цикле определяем объект url массива arrayURL, который включается в обработку в теле цикла. Скорость приведенного способа выше предыдущего.

И, наконец, способ 3 с использованием блока:

[arrayURL enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    if (idx != arrayURL.count) {
        NSLog(@"%i. %@", idx + 1, obj);
    };
        
    if (idx == 5) {
        *stop = YES;
    }
}];

В цикле элементами выступают объект obj, индекс idx и нулевая переменная stop, при помощи которой у нас есть возможность при выполнении заданного условия прервать обработку массива. Данный способ является самым производительным.

Подведем итоги: эта тема будет интересна в первую очередь тем, кто хочет расширить свои познания в области изучения возможностей Objective-C. При решении одной из задач в нашем проекте Cookorama я на практике применил третий способ для обработки массива полученных от сервера данных.