2009-11-02 3 views
7

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

static BOOL MyConstantBool = YES; 

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

+0

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

+5

@Alex - не совсем. Другой - как определить их. Здесь их можно определить. –

ответ

10

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

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

1

Если это после блока @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

Не может быть 'static' и' extern' в одно и то же время. –

+0

@ Carl ACK! спасибо за исправление. Я отредактировал ответ –

0

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

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

Смежные вопросы