Quando dovrei usare variabili statiche con tipi primitivi?

3

Recentemente mi sono imbattuto nella domanda NSString: perché utilizzare il metodo statico sul letterale ? e nei commenti è arrivata una nuova domanda.

In Objective-C ci sono alcuni tipi "speciali" che sono solo mappe di primitivi C. Mi piace NSInteger .

#if __LP64__ || (TARGET_OS_EMBEDDED && !TARGET_OS_IPHONE) || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
typedef long NSInteger;
#else
typedef int NSInteger;
#endif

So come usare le parole chiave static per gli oggetti, ma non capisco le implicazioni sui tipi primitivi C.

Quando dovrei usare un static NSInteger x invece di NSInteger x ? Cosa succede con la memoria in entrambi i casi?

    
posta Felipe Cypriano 25.11.2011 - 14:50
fonte

1 risposta

1

La parola chiave statica può avere tre significati in relazione alle primitive

  1. Dichiarato all'interno di una funzione. Si potrebbe pensare a questo come essenzialmente creando una cache che ha solo scopo nella funzione. La variabile viene inizializzata solo una volta che viene chiamata la prima volta. La variabile conserva lo stesso stato della chiamata precedente su tutte le chiamate successive alla funzione. Nessuna variabile statica viene messa in pila e ha una durata equivalente alla durata della funzione. La memoria per le variabili statiche è altrove e sempre esiste in modo simile a una variabile globale. In pratica, difficilmente vedo questo usato e personalmente, non penso di averlo mai usato al di fuori del debugging.
  2. Dichiarato nell'ambito globale. L'uso di una variabile statica in ambito globale limita semplicemente l'ambito della variabile al file in cui è stato dichiarato. È una variabile globale, ma è accessibile solo dall'ambito / file in cui è stato dichiarato. Lo uso sempre . È certamente una buona pratica dal punto di vista dell'incapsulamento dei dati, ma aiuta anche a limitare possibili collisioni nello spazio dei nomi. Non c'è differenza nell'uso della memoria.
  3. dichiarato in classe. Questo è simile al primo esempio. Per ogni variabile statica in una classe esiste esattamente una "copia" indipendentemente dal numero di oggetti Class creati. È un po 'come una variabile globale che tutti gli oggetti istanziati di quel tipo condividono.
risposta data 29.11.2011 - 20:55
fonte

Leggi altre domande sui tag