Nsmutabableset addobject.
-
08-10-2019 - |
Вопрос
У меня есть класс, который обернутся вокруг NSMutableSet
объект, и у меня есть метод экземпляра, который добавляет объекты (используя addObject:
метод) к NSMutableSet
.
Это хорошо работает, но я пахную сцепной производительностью, потому что внутри метода я явно призываю containsObject:
перед добавлением объекта к набору.
Три часть Вопрос:
- Нужно ли звонить
containsObject:
Прежде чем добавить объект к набору? - Если это так, то какой фактический метод я должен использовать,
containsObject
илиcontainsObjectIdenticalTo:
? - Если это не так, что
contains
Метод вызывается под капотомaddObject:
? Это важно для меня, потому что если я передаю объект кcontainsObject:
Это вернется правда, но если я передаю егоcontainsObjectIdenticalTo:
Это вернет ложь.
Решение
Если вы упаковываете NSMutableSet
, затем вызовы containsObject:
не нужно, поскольку набор (по определению) не содержит дубликатов. Как таковой, если вы пытаетесь вставить объект, который уже находится в наборе, ничего не произойдет.
Что касается достижения производительности, не беспокойтесь об этом, если вы на самом деле не измеряете его проблемой. Я был бы очень очень удивлен, если вы даже сможете, потому что набор (по крайней мере, умная реализация набора) имеет o (1) время поиска (средний случай). Я гарантирую вам, что NSSet
И друзья являются умными реализациями. :)
От того, что я собрал о реализации NSSet
, это вызывает -hash
на объектах как путь к «группировать» их в BINS, если вы используете containsObject:
или addObject:
. Отказ Если вы используете containsObjectIdenticalTo:
, это все еще будет использовать -hash
Чтобы сузить процесс поиска, а затем (по существу) выполнять сравнения указателя, чтобы найти идентичный объект.