NSMutableSet addObject
-
08-10-2019 - |
Frage
Ich habe eine Klasse bekam, dass umschlingt ein NSMutableSet
Objekt, und ich eine Instanz Methode, die Objekte (mit der addObject:
-Methode) zum NSMutableSet
hinzufügt.
Das funktioniert gut, aber ich bin eine Leistung hitch riechend, weil innerhalb der Methode i explizit containsObject:
Aufruf bin, bevor das Objekt in dem Satz hinzugefügt wird.
Eine dreiteilige Frage:
- muss ich anrufen
containsObject:
, bevor ich ein Objekt in dem Satz hinzufügen? - Wenn ja, dann tatsächlich welche Methode soll ich verwenden,
containsObject
odercontainsObjectIdenticalTo:
sein? - Wenn das nicht so ist, welche
contains
Verfahren wird unter der HaubeaddObject:
aufgerufen? Dies ist wichtig für mich, denn wenn ich ein Objekt übergeben es ancontainsObject:
würde true zurück, aber wenn ich escontainsObjectIdenticalTo:
passieren würde es false zurück.
Lösung
Wenn Sie eine NSMutableSet
sind Einwickeln, dann Aufruf containsObject:
ist nicht erforderlich, da ein Set ( durch Definition ) enthält keine Duplikate. Als solcher, wenn Sie ein Objekt einfügen versuchen, die bereits in der Reihe ist, wird nichts passieren.
Soweit eine Performance-Einbußen gehen, mach dir keine Sorgen darüber, wenn Sie es tatsächlich messen, ein Problem zu sein. Ich wäre sehr sehr sehr überrascht, wenn Sie selbst kann, weil ein Satz (zumindest eine intelligente Umsetzung eines Satzes) hat O (1) Lookup-Zeit (durchschnittlich Fall). Ich garantiere Ihnen, dass NSSet
und Freunde sind Smart-Implementierungen. :)
Von dem, was ich über die Umsetzung von NSSet
gesammelt haben, wird es den Aufruf -hash
auf die Objekte als eine Möglichkeit, „Gruppe“, um sie in die Behälter, wenn Sie containsObject:
oder addObject:
verwenden. Wenn Sie containsObjectIdenticalTo:
verwenden, wird es noch -hash
verwendet den Suchprozess zu verengen, und dann (im Wesentlichen) keine Zeiger Vergleiche ein identisches Objekt zu finden.