2011-12-19 13 views
7

Sono un po 'nuovo per Cocoa e stavo leggendo su NSIndexSet. Perché è necessario? Mi sembra che lo NSIndexSet non sia altro che uno NSSet di interi, giusto? Qual è lo scopo di creare una collezione separata nel complesso?Qual è la differenza tra NSIndexSet e NSSet?

risposta

12

ci sono un paio di ragioni: interi

  1. NSIndexSet negozi senza segno tipi primitivi, mentre NSSet negozi oggetti.
  2. NSIndexSet è ottimizzato per la memorizzazione di interi senza segno, in particolare un insieme di numeri interi in un'altra struttura di dati come un NSArray.
+1

Per elaborare il numero 2, NSIndexSet consente di scorrere gli indici in ordine o in ordine inverso. Un NSSet non è ordinato e un NSOrderedSet viene ordinato manualmente (ovvero è possibile interrompere l'ordine inserendo un oggetto nella posizione errata). –

+0

Capito. Un'altra cosa che ho appena notato. NSIndexSet utilizza effettivamente NSRange per memorizzare indici consecutivi, anzi molto ottimizzati per l'archiviazione del valore dell'indice in altre raccolte. – Tony

+0

Le operazioni su 'NSSet' sono O (1) (hashing), mentre la maggior parte delle operazioni' NSIndexSet' sono O (N) (looping). –