Где я должен объявлять статические переменные?
т. е. я хочу внести это в свой код:
static BOOL MyConstantBool = YES;
Должно ли это быть до или после @ implementation? Есть ли правила, где это разместить? Может ли он также войти в файл заголовка?
3 ответов
Если вы хотите определить глобальную переменную, не имеет значения, где вы ее поместите (внутри или вне @ implementation). В этом контексте static
означает, что переменная видима только из этой единицы компиляции (.m-файл.)
существуют также статические переменные, которые определены в функциях. Они работают как глобальные переменные, но видны только в области видимости функции.
если это после @implementation
блок, тогда вы не можете использовать его в @implementation
block (Если только он не был объявлен в другом месте, используя 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
глобальные переменные могут идти почти везде, где вы хотите; просто поместите его в любом месте имеет смысл стилистически. Лично я предпочитаю видеть глобалы в верхней части исходных файлов.
хотя вы можете поместить определение в файл заголовка, я не рекомендую его. Размещение любого определения в заголовочном файле может привести к ошибкам компоновщика символов с множественным определением. Если вам нужно более одной единицы компиляции, чтобы увидеть переменную, вы не можете сделать это static
в любом случае - вы будете нужно определить его в файле реализации где-нибудь и использовать extern
чтобы сделать его видимым среди различных исходных файлов.