Pergunta

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

O SystemSoundID (que é um UInt32) é atribuído automaticamente a 0?ou devo atribuí-lo explicitamente?Tenho que fazer desta forma e testar para ver se não foi inicializado pelo método Utilities porque ele não compila se eu apenas fizer static SystemSoundID soundID = [Utilities createSystemSoundIDFromFile:@"beep" ofType:@"caf"];.No começo tentei atribuí-lo a NULL, mas depois percebi que não é um ponteiro, então, de qualquer forma, devo ter o = 0 aí ou é redundante?

Foi útil?

Solução

Esta pergunta não envolve nenhum recurso Objective-C, portanto a resposta é encontrada no padrão C.

C99, Seção §6.7.8, parágrafo 10:

Se um objeto com duração de armazenamento estático não for inicializado explicitamente, então:

...

- Se possui tipo aritmético, é inicializado (positivo ou não assinado) zero;

UINT32 (que é apenas UINT32_T) é um tipo aritmético. Portanto, inicializado para zero.

Outras dicas

Isso não tem nada a ver com o tipo – tem a ver com a classe de armazenamento.Em C, variáveis ​​estáticas e globais são inicializadas automaticamente em 0.Variáveis ​​locais comuns (automáticas) não são inicializadas automaticamente, então você terá que fazer isso sozinho ou elas conterão lixo.

Acredito que o objetivo-c segue as mesmas regras que C para isso.

variáveis ​​estáticas e globais são inicializadas em 0 enquanto locais (ou seja,auto) não são inicializadas e podem começar com um valor imprevisível.

Dito isto, não faz mal inicializar explicitamente o valor como 0.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top