Domanda

- (void)playAlarmSound:(NSTimer *)theTimer {
    static SystemSoundID soundID/* = 0 */; // ?
    if (!soundID) {
        soundID = [Utilities createSystemSoundIDFromFile:@"beep" ofType:@"caf"];
    }
    ...
}

È SystemSoundID (che è un UInt32) assegnato automaticamente 0? o dovrei esplicitamente assegnarlo? Devo farlo in questo modo e di prova per vedere se non è stato inizializzato con il metodo di utilità perché non si compila se faccio e basta static SystemSoundID soundID = [Utilities createSystemSoundIDFromFile:@"beep" ofType:@"caf"];. All'inizio ho cercato di assegnare a NULL, ma poi mi sono reso conto suo non è un puntatore, quindi, comunque, dovrei avere il = 0 in là o è ridondante?

È stato utile?

Soluzione

Questa domanda non comporta tutte le funzioni Objective-C, in modo che la risposta si trova nello standard c.

C99, sezione §6.7.8, comma 10:

  

Se un oggetto che ha   durata di conservazione statico non è   inizializzato esplicitamente, allora:

     

...

     

- se ha tipo aritmetico, è   inizializzato (positivo o senza segno)   zero;

UInt32 (che di per sé è solo uint32_t) è un tipo aritmetico. Quindi, inizializzato a zero.

Altri suggerimenti

Questo non ha nulla a che fare con il tipo - ha a che fare con la classe di memoria. In C, le variabili statiche e globali vengono inizializzati automaticamente a 0. variabili ordinarie locali (auto) non vengono inizializzate automaticamente, in modo da avere a che fare da soli o faranno contenere spazzatura.

Credo Objective-C segue le stesse regole di C per questo.

variabili statiche e globali vengono inizializzati a 0 mentre (auto) ossia le variabili locali non sono pronte e possono iniziare con un valore imprevedibile.

Detto questo, non fa male per inizializzare in modo esplicito il valore a 0.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top