У меня есть NSMutableArray
, который заполнен объектами строк. Для простоты скажем, что объекты - это человек, и каждый объект-человек содержит информацию об этом человеке.
Таким образом, у меня будет NSMutableArray, заполненный объектами person:
person.firstName
person.lastName
person.age
person.height
и т. Д.
Первоначальный источник данных поступает с веб-сервера и заполняется, когда мое приложение загружается и завершает свою инициализацию на сервере. Периодически мое приложение опрашивает сервер на предмет последнего списка имен.
В настоящее время я создаю NSArray
набора результатов, очищаю NSMutableArray
и затем заново заполняю NSMutableArray
результатами NSArray
перед уничтожением объекта NSArray
.
Это кажется мне неэффективным на нескольких уровнях, а также представляет проблему с потерей ссылок на строки таблицы, которые я могу обойти, но, возможно, создаю для себя больше работы.
Похоже, неэффективность заключается в том, что я должен иметь возможность сравнить два массива и получить отфильтрованный NSArray
. Затем я могу добавить отфильтрованный набор в NSMutableArray
. Это будет означать, что я могу просто добавить новые данные в NSMutableArray
вместо того, чтобы выбросить все и заново заполнить.
И наоборот, мне нужно сделать тот же фильтр в обратном порядке, чтобы увидеть, есть ли записи, которые нужно удалить из NSMutableArray
.
Есть ли способ сделать это более эффективным способом? Я что-то упустил в документации, где упоминается более простая техника?
У меня возникает проблема, когда я очищаю NSMutableArray
и повторно заполняю его тем, что любые ссылающиеся таблицы теряют свое выбранное состояние строки. Я могу отследить и повторно выбрать его, но моя теория состоит в том, что использование некоторой формы сравнения и добавления объектов и удаления объектов вместо обработки всего массива в одном блоке может означать, что я сохраню ссылку на строку (при условии, что элемент не удалил конечно).
Любые предложения или помощь приветствуются.
Обновление
Было бы так же быстро выполнить быстрое перечисление для каждого сравнения каждой позиции, как я? Это кажется дорогой операцией, но с последним быстрым кодом перечисления это может быть довольно эффективно ...
Решение
Я закончил с предложением Абизема. Создание изменяемой копии массива и копии объекта представляется немного более быстрым подходом, чем использование решения sbooth при работе с большими наборами данных. Оба отлично работали, я просто получил преимущество, используя подход с изменяемым копированием. Это сказало, это действительно открыло мои глаза к NSSet, куда я не смотрел прежде.
Спасибо за отзыв.