Domanda

Non capisco le variabili statiche quando definito nella realizzazione di un'interfaccia. Nei metodi capisco come essi differiscono da variabili locali, ma non quando definito direttamente in un'implementazione.

Guardate questi esempi. Che differenza fanno questi due fa praticamente?

#include "MyClass.h"

@implementation MyClass
int myInt;
...
@end

E

#include "MyClass.h"

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

myInt è in entrambi i casi visibili a tutti i metodi, e se ho interpretato un test mi sono imbattuto in modo corretto, myInt sarà in entrambi i casi è la stessa variabile per le diverse istanze della classe.

È stato utile?

Soluzione

La parola chiave 'static' in questo contesto è la stessa sarebbe in pianura C: limita il campo di applicazione myInt al file corrente

.

Altri suggerimenti

Purtroppo, ha effetti diversi a seconda di dove lo si utilizza.

funzioni statiche:
Per impostazione predefinita, tutte le funzioni hanno una portata globale. Lo specificatore static consente di limitare la portata della funzione per il file corrente.

statiche Le variabili locali:
Quando si utilizza il modificatore statico su una variabile locale, la funzione “ricorda” il suo valore attraverso invocazioni. Ad esempio, la variabile currentCount nel seguente frammento non viene mai ripristinato, così invece di memorizzare il numero in una variabile all'interno di main (), possiamo lasciare countByTwo () fare la registrazione per noi.

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

Questo uso della parola chiave static non influisce sulla portata delle variabili locali.
Per saperne di più sul statica parola chiave .

.

"Sia C e Objective-C, una variabile statica è una variabile che viene allocato per l'intera durata di un programma Questo è in contrasto variabili automatiche, la cui durata esiste durante una singola chiamata di funzione e dinamicamente allocato variabili come oggetti, che possono essere rilasciate dalla memoria quando non è più utilizzato. Più semplicemente, il valore di una variabile statica viene mantenuta per tutta la funzione / metodo chiama. quando dichiarata al di fuori di una funzione, una variabile statica è visibile a tutto ciò all'interno del file in che è dichiarate;. quando dichiarata all'interno di una funzione o metodo, è visibile solo all'interno di tale funzione o metodo, ma il valore viene mantenuto tra le chiamate "

Controlla la spiegazione completa qui:

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

Da "The Objective-C Programming Language" di Apple: "Dichiarazione di variabile static limita la portata a solo la classe - e solo la parte della classe che è implementato nel file (. così diversamente variabili di istanza, variabili statiche non possono essere ereditate da, o direttamente manipolati da, sottoclassi). "

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top