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:

  1. muss ich anrufen containsObject:, bevor ich ein Objekt in dem Satz hinzufügen?
  2. Wenn ja, dann tatsächlich welche Methode soll ich verwenden, containsObject oder containsObjectIdenticalTo: sein?
  3. Wenn das nicht so ist, welche contains Verfahren wird unter der Haube addObject: aufgerufen? Dies ist wichtig für mich, denn wenn ich ein Objekt übergeben es an containsObject: würde true zurück, aber wenn ich es containsObjectIdenticalTo: passieren würde es false zurück.
War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top