Pregunta

No entiendo muy bien las variables estáticas cuando se define en la implementación de una interfaz. En los métodos entiendo cómo se diferencian de las variables locales, pero no cuando se define directamente en una aplicación.

Mira estos ejemplos. ¿Qué diferencia hace estas dos son prácticamente?

#include "MyClass.h"

@implementation MyClass
int myInt;
...
@end

Y:

#include "MyClass.h"

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

myInt es en ambos casos visibles para todos los métodos, y si interpreté una prueba me encontré correctamente, myInt será en ambos casos ser la misma variable para diferentes instancias de la clase.

¿Fue útil?

Solución

La palabra clave 'estático' en este contexto es el mismo que sería normal en C: limita el alcance de myInt al archivo actual

.

Otros consejos

Por desgracia, tiene efectos diferentes dependiendo de donde vaya a utilizarlo.

Funciones estáticas:
Por defecto, todas las funciones tienen un alcance global. El especificador estática le permite limitar el alcance de la función en el archivo actual.

estáticas Las variables locales:
Cuando se utiliza el modificador static en una variable local, la función “recuerda” su valor a través de invocaciones. Por ejemplo, la variable currentCount en el siguiente fragmento nunca se reinicio, así que en vez de almacenar el recuento de una variable dentro de main (), podemos dejar countByTwo () hacer la grabación para nosotros.

// 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;
}

Este uso de la palabra clave static no afecta al ámbito de las variables locales.
Más información sobre la estática palabra clave .

.

"En ambos C y Objective-C, una variable estática es una variable que se asigna para toda la vida útil de un programa Esto está en contraste con variables automáticas, cuyo tiempo de vida existe durante una única llamada de función, y asignada dinámicamente- variables como objetos, que pueden liberarse de la memoria cuando ya no se utiliza. Más simplemente, el valor de una variable estática se mantiene durante toda la función / método de llamadas. cuando se declare fuera de una función, una variable estática es visible para todo dentro del archivo en el que se declara;. cuando declarado dentro de una función o método, es visible sólo dentro de esa función o método, pero el valor es retenido entre las llamadas "

Salida la explicación completa aquí:

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

Desde "El Objective-C Programming Language" de Apple: "Declarar una variable estática limita su alcance a sólo la clase - y sólo la parte de la clase que se implementa en el archivo (. por lo tanto a diferencia de las variables de instancia, variables estáticas no pueden ser heredados por, o directamente manipuladas por, subclases). "

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top