68 votes

Quelle est la signification des variables statiques dans une implémentation d'une interface ?

Je ne comprends pas bien les variables statiques lorsqu'elles sont définies dans l'implémentation d'une interface. Dans les méthodes, je comprends comment elles diffèrent des variables locales, mais pas lorsqu'elles sont définies directement dans une implémentation.

Regardez ces exemples. Quelle différence font-ils dans la pratique ?

#include "MyClass.h"

@implementation MyClass
int myInt;
...
@end

Et :

#include "MyClass.h"

@implementation MyClass
static int myInt;
...
@end

myInt est dans les deux cas visible par toutes les méthodes, et si j'ai interprété un test, il s'est déroulé correctement, myInt sera dans les deux cas la même variable pour différentes instances de la classe.

88voto

appsunited Points 296

Malheureusement, il a des effets différents selon l'endroit où vous l'utilisez.

Fonctions statiques :
Par défaut, toutes les fonctions ont une portée globale. Le spécificateur static vous permet de limiter la portée de la fonction au fichier actuel.

Variables locales statiques :
Lorsque vous utilisez le modificateur statique sur une variable locale, la fonction "se souvient" de sa valeur entre les invocations. Par exemple, la variable currentCount dans l'extrait suivant n'est jamais réinitialisée, donc au lieu de stocker le compte dans une variable à l'intérieur de main(), nous pouvons laisser countByTwo() faire l'enregistrement pour nous.

// main.m
#import <Foundation/Foundation.h>

int countByTwo() {
    static int currentCount = 0;
    currentCount += 2;
    return currentCount;
}

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSLog(@"%d", countByTwo());    // 2
        NSLog(@"%d", countByTwo());    // 4
        NSLog(@"%d", countByTwo());    // 6
    }
    return 0;
}

Cette utilisation du mot clé static n'affecte pas la portée des variables locales.
En savoir plus sur le mot-clé statique .

68voto

smorgan Points 11001

Le mot-clé 'static' dans ce contexte est le même qu'en C : il limite la portée de myInt au fichier courant.

16voto

c roald Points 717

Extrait du document "The Objective-C Programming Language" d'Apple : "Déclarer une variable statique limite sa portée à la classe -- et à la partie de la classe qui est implémentée dans le fichier. (Ainsi, contrairement aux variables d'instance, les variables statiques ne peuvent pas être héritées par, ou directement manipulées par, les sous-classes)."

5voto

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