Где я должен объявить статические переменные? - PullRequest
7 голосов
/ 02 ноября 2009

т.е. Я хочу внести это в мой код:

static BOOL MyConstantBool = YES;

Должно ли это быть до или после @implementation? Есть ли правила, где это разместить? Это может также войти в файл заголовка?

Ответы [ 3 ]

10 голосов
/ 02 ноября 2009

Если вы хотите определить глобальную переменную, не имеет значения, где вы ее поместите (внутри или снаружи @implementation). В этом контексте static означает, что переменная видна только из этого модуля компиляции (файл .m).

Существуют также статические переменные, которые определены в функциях. Они работают как глобальные переменные, но видны только из области действия функции.

1 голос
/ 02 ноября 2009

Если это после блока @implementation, вы не можете использовать его в блоке @implementation (если только он не был объявлен в другом месте с использованием extern). Вот как я это делаю:

//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 голосов
/ 02 ноября 2009

Глобалы могут идти куда угодно; просто поместите это в любое место, которое имеет смысл стилистически. Лично я предпочитаю видеть глобалы в верхней части исходных файлов.

Хотя вы можете поместить определение в заголовочный файл, я не рекомендую его. Размещение любого вида определения в заголовочном файле может привести к многократным ошибкам компоновщика символов в будущем. Если вам нужно более одного модуля компиляции, чтобы увидеть переменную, вы все равно не сможете сделать ее static - вам нужно определить ее где-нибудь в файле реализации и использовать extern, чтобы сделать ее видимой среди различных исходных файлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...