ИСПОЛЬЗОВАНИЕ #define:
вы не можете отладить значение идентификатора
работа с #define и другими макросами - это задание Pre-Processor, когдасначала вы нажимаете Build / Run, он предварительно обработает исходный код, он будет работать со всеми макросами (начиная с символа #),
Предположим, вы создали
#define LanguageTypeEnglish @"en"
и использовалиэто в 2 местах в вашем коде.
NSString *language = LanguageTypeEnglish;
NSString *languageCode = LanguageTypeEnglish;
он заменит "LanguageTypeEnglish" на @"en"
во всех местах.Таким образом, будут созданы 2 копии @"en"
.то есть
NSString *language = @"en";
NSString *languageCode = @"en";
Помните, что до этого процесса компилятор не отображается.
После предварительной обработки всех макросов на экране появляется компилятор, и он получает код ввода, подобный этому,
NSString *language = @"en";
NSString *languageCode = @"en";
и скомпилируйте его.
ИСПОЛЬЗУЯ статический:
он учитывает область видимости и является типобезопасным.вы можете отладить значение идентификатора
Во время процесса компиляции, если найден компилятор,
static NSString *LanguageTypeRussian = @"ru";
, тогда он проверит, сохранена ли ранее переменная с тем же именем, если да, то она только пройдетуказатель этой переменной, если нет, он создаст эту переменную и передаст ее указатель, в следующий раз он будет передавать только указатель того же самого.
Таким образом, используя статические, в пределах одного генерируется только одна копия переменнойсфера.