2009-11-02 17 views
7

tj chcę przynieść to w moim kodu:Gdzie muszę zadeklarować zmienne statyczne?

static BOOL MyConstantBool = YES; 

Musi być przed lub po @implementation? Czy istnieją zasady gdzie to umieścić? Czy może również przejść do pliku nagłówkowego?

+0

Duplikat? http://stackoverflow.com/questions/1662828/how-to-define-a-bool-constant –

+5

@Alex - niezupełnie. Drugim było to, jak je zdefiniować. Tutaj można je zdefiniować. –

Odpowiedz

10

Jeśli chcesz zdefiniować zmienną globalną, nie ma znaczenia, gdzie ją umieścisz (wewnątrz lub na zewnątrz @ implementacji). W tym kontekście static oznacza, że ​​zmienna jest widoczna tylko z poziomu tej jednostki kompilacji (pliku .m).

Istnieją również zmienne statyczne, które są zdefiniowane w funkcjach. Działają one jak zmienne globalne, ale są widoczne tylko z zakresu funkcji.

1

Jeśli jest to po bloku @implementation, to nie można go użyć w bloku @implementation (chyba, że ​​został on zgłoszony w innym miejscu przy użyciu extern). Oto, jak to zrobić:

//Constants.h 
extern BOOL MyConstantBool; 
extern NSString* MyConstantString; 


//Constants.m 
#import "Constants.h" 
BOOL MyConstantBool = YES; 
NSString* MyConstantString = @"Hello, world!"; 


//SomeOtherFile.m 
#import "Constants.h" 
//you can now use anything declared in Constants.h 
+0

Nie może być jednocześnie "statyczny" i "zewnętrzny". –

+0

@ ACAR ACK! Dziękuję za poprawienie mnie. Edytowałem odpowiedź –

0

Globale mogą iść prawie wszędzie, gdzie chcesz; po prostu umieść to w jakimkolwiek miejscu ma sens stylistycznie. Wolę oglądać osobiście globale u góry plików źródłowych.

Chociaż można umieścić definicję w pliku nagłówkowym, nie polecam go. Umieszczenie dowolnego rodzaju definicji w pliku nagłówkowym może prowadzić do wielokrotnie zdefiniowanych błędów łącznika symboli na trasie. Jeśli potrzebujesz więcej niż jednej jednostki kompilacji, aby zobaczyć zmienną, nie możesz jej mimo to zrobić static - musisz ją gdzieś zdefiniować w pliku implementacji i użyć extern, aby była widoczna wśród różnych plików źródłowych.

Powiązane problemy