Где я должен объявлять статические переменные?

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

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 чтобы сделать его видимым среди различных исходных файлов.