Question

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

est SystemSoundID (qui est un UInt32) attribué automatiquement 0? ou devrais-je attribuer explicitement? Je dois le faire de cette façon et de tester pour voir si elle n'a pas été initialisé par la méthode Utilities, car il ne compile pas si je fais juste static SystemSoundID soundID = [Utilities createSystemSoundIDFromFile:@"beep" ofType:@"caf"];. Au début, j'ai essayé de l'assigner à NULL, mais je réalisai ce ne est pas un pointeur, de toute façon, devrais-je avoir le = 0 là-dedans ou est-il redondant?

Était-ce utile?

La solution

Cette question ne comporte pas de fonctionnalités c objectif, de sorte que la réponse se trouve dans la norme c.

C99, section §6.7.8, paragraphe 10:

  

Si un objet qui a   durée de stockage statique est pas   initialisé explicitement, alors:

     

...

     

- si elle est de type arithmétique, il est   initialisé à (positive ou non signé)   zéro;

UInt32 (qui lui-même est simplement uint32_t) est un type arithmétique. Par conséquent, initialisé à zéro.

Autres conseils

Cela n'a rien à voir avec le type - il doit faire avec la classe de stockage. En C, les variables statiques et globales sont automatiquement initialisé à 0. variables locales ordinaires (auto) ne sont pas initialisés automatiquement, donc vous devez le faire vous-même ou ils contiennent des déchets.

Je crois objective-c suit les mêmes règles que C pour cela.

variables statiques et globales sont initialisées à 0 alors que les variables locales (à savoir auto) ne sont pas initialisés et peuvent commencer par une valeur imprévisible.

Cela dit, il ne fait pas mal d'initialiser explicitement la valeur à 0.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top