NSMutableSet addObject
-
08-10-2019 - |
Pregunta
Tengo una clase que se envuelve alrededor de un objeto NSMutableSet
, y tengo un método de instancia que añade objetos (usando el método addObject:
) a la NSMutableSet
.
Esto funciona bien, pero estoy oliendo un enganche de rendimiento, ya que dentro del método que estoy llamando explícitamente containsObject:
antes de añadir el objeto al conjunto.
Tres cuestión parte:
- ¿Necesito estar llamando
containsObject:
antes de agregar un objeto al conjunto? - Si es así, entonces, ¿qué método real debería estar utilizando,
containsObject
ocontainsObjectIdenticalTo:
? - Si no es así, ¿qué método se invoca
contains
bajo el capó deaddObject:
? Esto es importante para mí, porque si me pasa un objeto acontainsObject:
volvería cierto, pero si lo paso acontainsObjectIdenticalTo:
volvería falsa.
Solución
Si está pasando un NSMutableSet
, a continuación, invocando containsObject:
es innecesario, ya que un conjunto ( por definición ) no contiene duplicados. Como tal, si se intenta insertar un objeto que ya está en el conjunto, no pasará nada.
En cuanto a un impacto en el rendimiento va, no se preocupe de ella a menos que realmente mida siendo un problema. Estaría muy muy muy sorprendido si es que se podía, porque un conjunto (al menos, una aplicación inteligente de un conjunto) tiene O (1) tiempo de búsqueda (caso promedio). Les garantizo que NSSet
y amigos son implementaciones inteligentes. :)
A partir de lo que he reunido acerca de la implementación de NSSet
, está invocando -hash
en los objetos como una forma de "grupo" de ellos en contenedores de si se utiliza o containsObject:
addObject:
. Si utiliza containsObjectIdenticalTo:
, todavía va a utilizar -hash
para reducir el proceso de búsqueda, y luego (esencialmente) no comparaciones puntero para encontrar el objeto idéntico.