Статическая глобальная переменная в Obj-C? - PullRequest
0 голосов
/ 16 июня 2010
// in ClassA.h  
<b>static</b> NSString *globalStr = @"HelloWorld";

@interface ClassA  
    ...  
@end

// in ClassB.h  
#include "ClassA.h"

// in ClassB.m  
...  
NSLog(@"The global string: %@", globalStr);
...

В C ++ «статический» должен означать, что переменная или функция имеет внутреннюю связь.
Но он используется для совместного использования переменной в этом случае, ошибка будет происходить без статического ключевого слова.

Я в замешательстве, может кто-нибудь сказать мне концепцию позади?
Спасибо!

1 Ответ

5 голосов
/ 16 июня 2010

static означает то же самое в Objective-C, что в средстве на C - у него есть внутренняя связь и длительность статического хранения.В этом случае вы получите ошибку без static, потому что у вас будет повторяющийся символ globalStr в каждом объекте, исходный код которого включает ClassA.h.Вы не делитесь чем-либо - вы получаете новую копию globalStr для каждой единицы компиляции.

Не помещайте определения объектов в заголовки, и вы станете лучшевыкл.Если вам нужна одна глобальная строка, вам нужно поместить

extern NSString *globalStr;

в ClassA.h и определить ее в ровно в одном файле реализации как:

NSString *globalStr = @"HelloWorld";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...