2010-03-28 6 views
6

Sto pensando di introdurre:Qual è la penalità delle prestazioni dell'uso di isKindOfClass nell'obiettivo C?

if ([myInstance isKindOfClass:[SomeClass class]]) { do something...} 

in un pezzo di codice che viene chiamato abbastanza spesso. Introdurrò una significativa penalizzazione delle prestazioni? In Objective C, c'è un modo più rapido per valutare se una data istanza di un oggetto è di un certo tipo di classe? Ad esempio, è il seguente più veloce? (Mi rendo conto che il test è un po 'diversa)

if (myInstance.class == [SomeClass class]) { do something else...} 
+6

Cosa i risultati della vostra profiling vi dico? –

+0

Non ho ancora effettuato alcuna analisi; questo è il mio prossimo passo. Speravo di trovare qualche documentazione che spiegasse la magia sottostante per le classi nell'Objective C prima di passare al cieco perf testing. Tuttavia, non ho trovato nulla, quindi ho intenzione di provare diverse permutazioni dopo. Qualche suggerimento su come altro potrei identificare un tipo di classe di una data istanza? – durcicko

+0

Non esistono test di prestazioni ciechi ... solo ottimizzazione cieca! Inoltre, il runtime Obj-C decide quale metodo chiamare in base alla classe dell'oggetto ogni volta che chiami un metodo, quindi approfittane mettendo il {do something ...} in un metodo sulla classe che ti interessa – codewarrior

risposta

4

Il modo più veloce per vedere se due oggetti sono della stessa classe è quello di confrontare i loro isa puntatori. Tuttavia, questo significa che ti perderai quando la classe di un oggetto è una sottoclasse della classe dell'altro oggetto, che è esattamente ciò che è inteso per isKindOfClass:.

Indipendentemente da ciò, l'ottimizzazione si sta parlando è già stato fatto qui:

http://www.mulle-kybernetik.com/artikel/Optimization/opti-3-imp-deluxe.html

+0

Questo è esattamente il tipo di informazioni che stavo cercando. Grazie per avermi indicato in quella direzione. – durcicko

+0

Qualcuno mi ha detto che Apple non vuole che tu usi direttamente i puntatori 'isa'. – funroll

Problemi correlati