Pergunta

Eu não entendo muito bem variáveis ??estáticas quando definido na implementação de uma interface. Em métodos que eu entendo como eles diferem de variáveis ??locais, mas não quando definido diretamente em uma implementação.

Veja estes exemplos. Que diferença faz estes dois fazem praticamente?

#include "MyClass.h"

@implementation MyClass
int myInt;
...
@end

E:

#include "MyClass.h"

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

myInt é em ambos os casos visíveis a todos os métodos, e se eu interpretei um teste eu corri corretamente, myInt vai em ambos os casos ser a mesma variável para diferentes instâncias da classe.

Foi útil?

Solução

O 'estático' palavra-chave nesse contexto é o mesmo que seria em C simples:. Limita o escopo da myInt ao arquivo atual

Outras dicas

Infelizmente, tem efeitos diferentes dependendo de onde você usá-lo.

funções estáticas:
Por padrão, todas as funções têm um alcance global. O especificador estático permite limitar o escopo da função para o arquivo atual.

variáveis ??estáticas locais:
Quando você usa o modificador estático em uma variável local, a função “lembra” o seu valor através de invocações. Por exemplo, a variável currentCount no seguinte trecho nunca fica reset, então ao invés de armazenar a contagem em um interior variável de main (), podemos deixar countByTwo () fazer a gravação para nós.

// 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 da palavra-chave estática não afeta o escopo de variáveis ??locais.
Leia mais sobre a estática chave .

"Em ambos C e Objective-C, uma variável estática é uma variável que está alocada para a vida inteira de um programa Isso está em contraste com variáveis ??automáticas, cujo tempo de vida existe durante uma única chamada de função;. E alocada dinamicamente variáveis ??como objetos, que podem ser lançados a partir da memória quando não são mais utilizados. Mais simplesmente, o valor de uma variável de estática é mantida durante todo todas as chamadas de função / método. quando declarada fora de uma função, uma variável estática é visível a tudo dentro do arquivo em qual é declarado;. quando declarados dentro de uma função ou método, é visível apenas dentro dessa função ou método, mas o valor é mantido entre as chamadas "

Confira a explicação completa aqui:

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

A partir da Apple "The Objective-C Programming Language": "Declarar uma variável estática limite o seu alcance apenas para a classe - e apenas a parte da classe que é implementado no arquivo (. assim, ao contrário de variáveis ??de instância, variáveis ??estáticas não pode ser herdado por, ou diretamente manipulado por, subclasses). "

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top