Objective-C Модификаторы для статики? - PullRequest
3 голосов
/ 06 июля 2011

Как мне создать статическую переменную в моем классе Objective C?Я знаком с использованием @private в моих заголовочных файлах для личных переменных, но я пытаюсь создать статический метод, который обращается к статической переменной.Как мне объявить эту статическую переменную в моем заголовочном файле?

Ответы [ 3 ]

3 голосов
/ 06 июля 2011

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

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

2 голосов
/ 06 июля 2011

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

1 голос
/ 06 июля 2011

Objective-C не имеет статических переменных класса. Однако вы можете создавать статические переменные модуля (как в C). Чтобы иметь приватную статическую переменную:

//MyClass.m
static int MyStatic;

@implementation MyClass
@end

даст MyStatic область действия уровня модуля. Поскольку это просто C, нет возможности сделать MyStatic видимым, например, из категории на MyClass, не делая его публично видимым через объявление extern. Поскольку статические переменные фактически являются глобальными переменными, это, вероятно, хорошо: MyClass должен делать абсолютно все возможное, чтобы скрыть существование MyStatic.

Если вы хотите, чтобы статическая переменная была общедоступной (вы действительно не хотите):

//MyClass.h
extern int MyStatic;

@interface MyClass {}
@end

//MyClass.m
int MyStatic;

@implementation MyClass
@end
...