Записки 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 я на практике применил третий способ для обработки массива полученных от сервера данных.