Доступ к переменным всего приложения: статический, как Java? - PullRequest
3 голосов
/ 07 мая 2011

В контроллере моего представления есть переменная экземпляра, которой я хотел бы поделиться со всей программой. Я не совсем уверен, как это сделать. Могу ли я просто объявить его как статическую переменную экземпляра, а затем получить к нему доступ через свойства типа ViewControllerClass.instancevariable?

Спасибо! * * 1004

1 Ответ

2 голосов
/ 07 мая 2011

В ответ на ваш комментарий прилагается к вопросу:

Если у вас есть переменная экземпляра в Объекте X, любой другой объект, имеющий ссылку на X, может получить доступ к этой переменной обычным способом:

[objectX myClassAInstanceVariable];
// Or, if declared with @property
objectX.myClassAInstanceVariable;

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


Понятие «статический» в Objective-C отличается от того, что вы могли ожидать (звучит так, будто вы пришли из опыта работы с Java).

Objective-C на самом деле не имеет понятия «переменные класса», хотя это довольно легко смоделировать; это описано в вопросе, с которым mathk связан: переменные уровня класса Objective-C . Вы объявляете переменную в заголовочном файле класса, которая является статической, так что она недоступна вне этого файла, и создаете для нее методы класса доступа.

Любой объект, имеющий ссылку на ваш контроллер представления, может отправлять ему сообщения. Обратите внимание, что в Objective-C переменные-члены по умолчанию «защищены», то есть доступ к этим переменным может иметь только экземпляр класса или подклассов, а не другие объекты. Другие объекты должны проходить через методы установки и получения.


Так же, как и другой вариант, поскольку фон вашего вопроса неясен, если у вас есть какая-то «глобальная переменная», которая на самом деле не специфична для вашего контроллера представления, лучшим местом для ее размещения может быть приложение делегировать *. Любой объект может получить ссылку на делегата в любое время:

[NSApp delegate];

NSApp - это глобальная ссылка на объект NSApplication, который является ядром вашей программы.


* Хотя, конечно, это можно переусердствовать.

...