Это зависит от того, как вы хотите использовать переменную. Если поместить объявление переменной внутри интерфейса для вашего класса, каждый экземпляр вашего класса будет иметь собственную копию переменной, которая хранится отдельно от всех других экземпляров вашего класса:
@interface AppsController : NSObject
{
NSMutableArray *personArray;
}
Каждый экземпляр класса AppsController
будет иметь свою собственную копию переменной personArray
, которая отделена от всех других экземпляров класса.
Если, однако, вы определяете переменную вне интерфейса, она становится глобальной переменной, и это общий (экземпляры вашего класса не получают свою собственную копию), и могут быть доступны из любой экземпляр вашего класса. Если вы объявляете его в заголовке, как например:
NSMutableArray *personArray;
также видны методы в других файлах и классов, которые включают в свой заголовок.
Если вы объявите переменную в файле реализации, но вне самой реализации и префикс ее с ключевым словом static
, переменная будет видна только для реализации вашего класса. Это часто встречается, когда вы хотите, чтобы переменная была видимой для всех экземпляров класса, но не была видимой для кого-либо еще, и является способом создания переменных класса.
Поскольку ваш объект является объектом контроллера, я предполагаю, что у вас есть только один экземпляр этого приложения.Вы должны объявить переменную как:
- В качестве переменного экземпляра, если ваша
personArray
переменного должны быть уникальным для каждого экземпляра вашего класса контроллера (даже если у вас есть только один экземпляр сейчас, вы можете иметь более одного пример его в будущем).
- В качестве переменной класса (с использованием ключевого слова
static
), если вы хотите, чтобы переменная была видимой для всех экземпляров вашего класса, имеет только один, общий экземпляр переменной.
- Как глобальная переменная, если вы хотите, чтобы переменная являлась единственным экземпляром (не уникальным для экземпляров вашего класса), а также видимым для других классов или кода в других файлах.
Глобальные переменные явно не объявлены как 'static' не статичны, они внешние (C99 §6.9.2 ¶4). GCC имеет параметр компилятора, который дает этот эффект, делая символы по умолчанию скрытыми видимостью, но обычно не включен, и он не является стандартным. –