les variables statiques en Objective-C - que font-ils?
J'ai vu quelques postes de discuter de ce qu'est une variable statique est et je pense que j'ai compris - mais j'aimerais écrire rapidement (ou trouver) un programme qui utilise à la fois régulier et une variable statique, côte à côte, et de voir comment ils fonctionnent différemment. Certains rapide n sale code, peut-être deux int vars et un couple de NSLog le suivi des déclarations, juste pour voir COMMENT ils sont différents.
Quelqu'un a obtenu des conseils/idées/code qui permettrait d'illustrer comment une static var diffère de l'ordinaire?
Vous devez vous connecter pour publier un commentaire.
Dans les deux C et Objective-C, un statique variable est une variable qui est alloué pour l'ensemble de la durée de vie d'un programme. Ceci est en contraste à automatique variables, dont la durée de vie existe lors d'un seul appel de fonction; et allouée dynamiquement des variables comme des objets, qui peut être libérée à partir de la mémoire lorsqu'il n'est plus utilisé. Plus simplement, une variable statique de la valeur est maintenue tout au long de tous les appels de méthodes/fonctions. Lorsqu'ils sont déclarés en dehors d'une fonction, une variable statique est visible par tout dans le fichier dans lequel elle est déclarée; quand déclarée à l'intérieur d'une fonction ou d'une méthode, il n'est visible qu'à l'intérieur de cette fonction ou de la méthode, mais la valeur est conservée entre les appels.
Dire que vous avez ceci:
Chaque appel à
f()
sera de retour la valeur15
.Disent maintenant que vous avez ceci:
La première fois
g()
est appelée, la valeur15
sera retourné. La deuxième fois,25
sera retourné, commei
maintenu sa valeur de15
et puis incrémenté lui-même par10
. Le troisième appel,35
sera retourné. Et ainsi de suite.Dans le cadre de l'Objectif-C classes, les variables statiques sont souvent utilisés pour imiter variables de classe, comme Objective-C n'a pas de variables de classe (d'autres langages, comme Java, n'). Par exemple, disons que vous voulez paresseusement initialiser un objet, et ne reviennent que de l'objet. Vous pouvez voir ceci:
obj
sera initialisé la première foisclassObject
est appelé; par la suite, les invocations declassObject
sera de retour le même objet. Vous pouvez le vérifier en vous connectant à l'adresse de l'objet:En outre,
obj
sera visible par toutes les méthodes dansMyObject
.Cette technique est utilisée à la mise en œuvre de singleton classes Objective-C et de l'.
sharedObject
est généralement une méthode de classe et retourne une instance de la classe.static MyObject *obj = nil;
à l'intérieur desharedObject
. Parce que c'est probablement le seul endroit où l'accèsobj
.g()
, ce qui se passe exactement sur la première ligne (static int i = 5;
) sur le second (et les suivantes) appels? Le compilateur simplement ignorer les assignations qui figurent dans les déclarations ultérieures d'une variable statique?static
variable, sauf quei
est portée àg()
.statique fonctionne principalement comme en C.
Il peut initialiser une variable qu'une seule fois.
La déclaration d'une variable statique dans un fichier ci-dessus
@implementation
bloc sera disponible pour l'ensemble du fichier."statique" se réfère plus aux attributs de la variable (qui, quoi, où) plutôt que de simplement la valeur. Contrairement à d'autres langues où il se réfère exclusivement à la valeur.
C'est comme l'épinglage de la var à un emplacement spécifique, que ce soit à l'intérieur d'une fonction ou dans la mise en œuvre.
Il possède les mêmes attributs à un "privé" du var, en ce qu'elle n'est pas visible pour les frères et sœurs ou les parents, mais les enfants peuvent accéder.
C'est une déclaration de la valeur par défaut. Comme dans d'autres langues où vous définissez vars au sein d'une classe et d'affecter leur valeur "par défaut":
private int myNumber = 3;
Cela donne de la "classe" comme des variables à l'intérieur des fonctions. Déclarer une fois, alors que la fonction manipule la valeur, la valeur est conservée. La prochaine fois que la fonction est appelée, la valeur sera la même qu'il y a après le "cycle", tout comme vous pouvez attendre d'une variable de classe du reste de la valeur après la manipulation.