44 votes

const vs statique NSStrings dans Objective-C

Ces lignes sont à la fois dans la mise en œuvre de fichier au-dessus de l' @implementation déclaration.

NSString * const aVar = @"aVarStringValue";

static NSString *aVar = @"aVarStringValue";

Comme je le comprends, le deuxième static est alloué qu'une seule fois dans la durée de vie de l'application et de ce fait contribue à la performance.

Mais est-ce à dire qu'il est essentiellement une fuite de mémoire, vu que ce bloc de mémoire ne sera jamais publié?

Et le premier const déclaration sont alloués à chaque fois qu'il est accessible en revanche?

102voto

notnoop Points 30218

static mot-clé en Objective-C et C/C++) indique la visibilité de la variable. Une variable statique (pas dans une méthode) ne peut être consulté dans cette .m le fichier. Une variable locale statique sur l'autre main, est attribué qu'une seule fois.

const d'autre part, indique que la référence ne peut pas être modifié et/ou réaffectés; et est orthogonale sur la façon dont il peut être créé (les compilateurs peuvent optimiser consts tout de même).

Il faut noter que, NSString des littéraux de l'initialisation et de ne jamais se détruit dans la vie de l'application. Ils sont répartis en lecture-seule une partie de la mémoire.

49voto

bbum Points 124887

La statique ne change la portée de la variable, pas la façon dont il est déclaré ou stockées.

Dans les deux cas, le compilateur va créer une constante de la version de la NSString instance qui est stocké dans le mach-o fichier. Ainsi, il n'y a qu'une seule instance de (notez que vous pouvez modifier le comportement à cause de la chaîne à être créées dynamiquement sur la charge de la mach-o, mais il est encore juste un exemple).

L' static seulement des marques de l' aVar variable comme étant visible dans le champ d'application de l'unité de compilation -- le fichier -- seulement. Sans l' static, vous pourriez redeclare la chaîne en tant que extern NSString *aVar; dans un en-tête quelque part et vous y avez accès à partir de n'importe où.

L' const est orthogonale et, dans le cas de NSString de référence est à peu près totalement hors de propos.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X