Какао NSArray/NSSet:-makeObjectsPerformSelector: по сравнению с быстрым перечислением

14
задан mouviciel 24 February 2009 в 16:50
поделиться

3 ответа

Я привел бы доводы в пользу использования makeObjectsPerformSelector, так как оно позволяет объекту NSSet заботиться о его собственной индексации, цикличном выполнении и диспетчеризации сообщения. Люди, которые написали код NSSet, скорее всего, будут знать лучший способ реализовать тот конкретный цикл.

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

тема кратко упоминается в Быстродействии Кода Apple документ в разделе, названном, "Разворачивая Циклы".

, Если Вы обеспокоены производительностью, лучшая вещь сделать настраивается быстрая программа, которая выполняет некоторый селектор на объектах в наборе. Имейте его, выполняет несколько миллионов раз, и время различие между двумя различными случаями.

22
ответ дан 1 December 2019 в 07:28
поделиться

makeObjectsPerformSelector: могло бы быть немного быстрее, но я сомневаюсь, там будет любым практическим различием 99% времени. Это немного более кратко и читаемо, хотя, я использовал бы его по этой причине.

2
ответ дан 1 December 2019 в 07:28
поделиться

Я не использовал бы makeObjectsPerformSelector по простой причине, что это - вид вызова, что Вы не видите все настолько часто. Вот то, почему, например - я должен добавить код отладки, поскольку массив перечисляется, и Вы действительно не можете сделать этого с makeObjectsPerformSelector, если Вы не изменяетесь, как код работает в режиме Release, который является реальным нет нет.

for (id item in mySetOfObjects)
{
    #if MY_DEBUG_BUILD
    if ([item isAllMessedUp])
        NSLog(@"we found that wily bug that has been haunting us"); 
    #endif

    [item action];
}

- Tom

4
ответ дан 1 December 2019 в 07:28
поделиться