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