Глобальная переменная iPhone?

Конечно, у меня есть два представления с собственными файлами .h и .m. Как я могу объявить bool (или любую другую переменную, если на то пошло) в одном представлении и получить доступ к нему в другом представлении?

Спасибо.


person Josh Kahane    schedule 30.08.2010    source источник
comment
нужна дополнительная информация, они отображаются в контроллере навигации? или это просто занятия?   -  person Thomas Clayson    schedule 30.08.2010
comment
Приношу свои извинения, просмотры в контроллере навигации.   -  person Josh Kahane    schedule 30.08.2010
comment
прочтите ответ по следующей ссылке, в нем четко объясняется stackoverflow.com/a/20423815/730807   -  person Durai Amuthan.H    schedule 28.06.2014


Ответы (3)


Objective C - это надмножество простого ANSI C, поэтому вы должны создавать и использовать глобальные переменные точно так же, как в старомодном C.

Ровно в один файл .m или .c поместите:

BOOL gMyGlobalBoolVar = NO;  // or YES, depending on whatever initial state is needed

Я мог бы разместить их в централизованном одноэлементном классе, таком как ваш файл appdelegate .m, или в отдельном файле .c, таком как myGlobals.c. Я обычно помещаю их после # import / includes, но перед определениями любого класса, метода или функции, чтобы уточнить, что к ним можно получить доступ за пределами любого объекта или функции.

В файлах .h для всех классов, к которым вы хотите получить доступ к gMyGlobalBoolVar, поместите:

extern BOOL gMyGlobalBoolVar;

Затем просто используйте их где угодно в классе:

if ( [ self dogHasFleas ] ) { 
  gMyGlobalBoolVar = YES; 
}

Использование глобальных переменных в настоящее время не является «политически корректным», но для быстрого кода, который вы никогда не будете пытаться публиковать, повторно использовать, расширять или искать грубые ошибки, они работают так же отлично, как и почти на всех компьютерах и языках программирования от 50+ лет назад.

person hotpaw2    schedule 30.08.2010
comment
Я не понимаю, почему с ними так борются. Я планирую опубликовать это приложение, поэтому желательно, чтобы оно было аккуратным, аккуратным, быстрым и быстрым. Какая же хорошая альтернатива, если мне действительно нужен глобальный доступ к этой переменной? - person Josh Kahane; 30.08.2010

Вы можете просто взять ссылку на представление, содержащее bool, и получить переменную с помощью геттера.

Если вам нужны переменные для всего приложения, вы можете поместить их в AppDelegate, но я настоятельно не рекомендую этого делать, поскольку это тесно связывает классы.

person Rengers    schedule 30.08.2010

Создайте класс модели данных. Создайте его в своем делегате приложения и передайте в контроллеры представления. Используйте наблюдение за ключевыми значениями, чтобы отслеживать изменения модели в ваших контроллерах представления. См. Мой ответ здесь: Как отображать и рассчитывать числа из базы данных на iPhone?

«Почему бы мне не использовать глобальные переменные? Это не повредит только один раз». Это плохая привычка. Избегание глобальных переменных упрощает чтение и повторное использование кода, упрощает расширение и упрощает отладку.

person Shaggy Frog    schedule 30.08.2010