Prestazioni dei metodi di classe rispetto ai metodi di istanza singleton

2

Nella mia app, sto utilizzando entrambe le strategie:

  1. Ho una classe Utils , ha solo metodi di classe che chiamo per fare metodi globali comuni, come NSString validation, ecc.

  2. Ho una classe singleton per tutta l'app che istanziato durante l'app Finito il lancio, e la uso in tutta l'app per mantenere oggetti / stato globali, eseguire processi a esecuzione prolungata, ecc.

La mia domanda è, nei termini di performance quale approccio è migliore? Sono contento di entrambi gli approcci, ma posso eseguire una migrazione economica ma impegnativa per spostare tutti i metodi della classe Utils sui metodi di istanza nel singleton a livello di app se ciò mi consentirà di ottenere miglioramenti delle prestazioni. I metodi Utils vengono chiamati un lotto nella mia app, ma in realtà non noto alcuna penalizzazione delle prestazioni in Strumenti.

Allo stesso modo, posso andare dall'altra parte e spostare almeno alcune delle funzioni un po 'generiche che finisco per aggiungere al singleton come metodi di classe nella classe Utils .

Qualche guru Objective-C ha dei benchmark concreti o anche opinioni forti su quale approccio è più performante?

    
posta Dhiraj Gupta 02.12.2014 - 11:44
fonte

1 risposta

3

Per cominciare se hai davvero bisogno di radere quei pochi nanosecondi in meno delle tue funzioni Utils C ++ (potenzialmente inline) sono probabilmente la cosa più veloce che ti viene offerta.

Per quanto riguarda la questione se i metodi di classe oi metodi di istanza di singleton siano più performanti non pretenderò di saperlo con certezza ma un rapido sguardo a runtime objective-c fornito con OSX 10.10 mostra che _class_getClassMethod chiama _class_getInstanceMethod che potrebbe indurti a pensare che i metodi di istanza sarebbero più veloci.

Esaminando ulteriormente, ho trovato che _object_getMethodImplementation chiama _class_getMethodImplementation . Il che indicherebbe che i metodi di classe sono leggermente più veloci da caricare.

Tutto questo è piuttosto discutibile anche se in ogni caso hai 1 o 2 ulteriori accessi al puntatore di funzione. Ciò sarebbe evidente solo se i tuoi metodi vengono chiamati almeno milioni di volte (e a quel punto l'ottimizzazione delle implementazioni del tuo metodo è probabilmente il tempo che trascorri meglio).

Stilisticamente, sono d'accordo con ciò che hai attualmente, usando singleton dove lo stato è richiesto e metodi di classe dove non lo è.

    
risposta data 02.12.2014 - 13:49
fonte

Leggi altre domande sui tag