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


