Objetivo C - Os SystemSoundIDs (UInt32 digitados) são atribuídos automaticamente a 0?
-
19-09-2019 - |
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?
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.