Pregunta

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

Es SystemSoundID (que es un UInt32) asigna automáticamente 0? o debería asignar explícitamente? Tengo que hacerlo de esta manera y la prueba para ver si no se ha inicializado por el método de utilidades, ya que no se compila si acabo de hacer static SystemSoundID soundID = [Utilities createSystemSoundIDFromFile:@"beep" ofType:@"caf"];. Al principio traté de asignarlo a NULL, pero luego me di cuenta que no es un puntero, por lo que de todos modos, debería tener la = 0 allí o es redundante?

¿Fue útil?

Solución

Esta pregunta no implica ningún características Objective-C, por lo que la respuesta se encuentra en el estándar c.

C99, sección §6.7.8, párrafo 10:

  

Si un objeto que tiene   la duración de almacenamiento estático no es   inicializado explícitamente, entonces:

     

...

     

- si tiene tipo aritmético, es   inicializado a (positivo o sin signo)   cero;

UInt32 (que en sí es sólo uint32_t) es un tipo aritmético. Por lo tanto, inicializado a cero.

Otros consejos

Esto no tiene nada que ver con el tipo - que tiene que ver con la clase de almacenamiento. En C, las variables estáticas y globales se inicializan automáticamente a 0. variables locales ordinarios (auto) no se inicializa automáticamente, por lo que tiene que hacer usted mismo o que van a contener basura.

Creo objetivo-c sigue las mismas reglas como C para esto.

variables estáticas y globales se inicializan a 0 (es decir, mientras auto) variables locales no se inicializan y pueden comenzar con un valor impredecible.

Dicho esto, no se pierde nada para inicializar explícitamente el valor a 0.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top