Это почти наверняка не проблема;NSArrays
на самом деле хэши , и поиск выполняется намного быстрее, чем для истинного массива.Сколько тем вы можете иметь в любом случае?
Тем не менее, если вы измеряете производительность и находите ее плохой, вы можете использовать B-дерево ;Курт Ревис прокомментировал ниже ссылку на аналогичную структуру ( двоичная куча ) в Core Foundation: CFBinaryHeap .
Другой вариант (который также должен быть измерен) может быть, чтобы сделать сравнение, как вы проходите массив в первый раз;Вы можете отметить место и выполнить вставку напрямую:
NSUInteger insertIndex = 0;
NSComparisonResult prevOrder = NSOrderedDescending;
for (Topic *topic in self.topics) {
NSComparisonResult order = [topicId compareToTopic:topic];
if (NSOrderedSame == order) {
// this publication is part of an existing topic, no new index path
[topic addPublication:pub];
return nil;
}
else if( prevOrder == NSOrderedDescending &&
order == NSOrderedAscending )
{
break;
}
insertIndex++;
prevOrder = order;
}
Обратите внимание, что я не проверял это, извините.
Я не уверен в этомна самом деле лучше или быстрее, чем вы написали.
Не беспокойтесь о работе, которую выполняет компьютер, если явно не делает это слишком медленно.