Question

Je ne comprends pas tout à fait variables statiques lorsqu'elles sont définies dans la mise en œuvre d'une interface. Dans les méthodes, je ne comprends comment ils diffèrent des variables locales, mais pas lorsqu'elles sont définies directement dans une mise en œuvre.

Regardez ces exemples. Quelle différence ces deux font pratiquement?

#include "MyClass.h"

@implementation MyClass
int myInt;
...
@end

#include "MyClass.h"

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

myInt est dans les deux cas visibles à toutes les méthodes, et si j'interprété un test j'ai couru correctement, myInt sera dans les deux cas la même variable pour différentes instances de la classe.

Était-ce utile?

La solution

Le mot-clé « statique » dans ce contexte est le même que ce serait dans la plaine C: elle limite la portée de myInt au fichier actuel

.

Autres conseils

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 mondiale. Le spécificateur statique permet de limiter la portée de la fonction du fichier en cours.

Variables locales statiques: Lorsque vous utilisez le modificateur statique sur une variable locale, la fonction « se souvient » de sa valeur à travers les invocations. Par exemple, la variable currentCount dans l'extrait suivant ne se remis à zéro, donc au lieu de stocker le nombre dans une variable à l'intérieur de la 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é statique ne modifie pas la portée des variables locales.
En savoir plus sur le mot-clé statique .

.

«Dans les deux C et variable Objective-C, un statique est une variable qui est alloué pendant toute la durée de vie d'un programme Ceci est en contraste à des variables automatiques, dont la durée de vie existe pendant un appel de fonction unique, et allouée dynamiquement variables comme des objets, qui peuvent être libérés de la mémoire lorsqu'ils ne sont plus utilisés. Plus simplement, est maintenue la valeur d'une variable statique à travers toutes les fonctions / appels de méthode. lorsque déclarée en dehors d'une fonction, une variable statique est visible à tout dans le fichier où elle est déclarée;. lorsqu'ils sont déclarés à l'intérieur d'une fonction ou méthode, il est visible que dans cette fonction ou méthode, mais la valeur est conservée entre des appels "

Découvrez l'explication complète ici:

https://stackoverflow.com/a/4965145/951349

De « Le langage de programmation Objective-C » d'Apple: « Déclarer une variable statique limite sa portée à juste la classe - et seulement la partie de la classe qui est mis en œuvre dans le fichier (. ainsi, à la différence des variables d'instance, les variables statiques ne peuvent être héritées par, ou directement manipulés par sous-classes). "

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