Конечно, у меня есть два представления с собственными файлами .h и .m. Как я могу объявить bool (или любую другую переменную, если на то пошло) в одном представлении и получить доступ к нему в другом представлении?
Спасибо.
Конечно, у меня есть два представления с собственными файлами .h и .m. Как я могу объявить bool (или любую другую переменную, если на то пошло) в одном представлении и получить доступ к нему в другом представлении?
Спасибо.
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+ лет назад.
Вы можете просто взять ссылку на представление, содержащее bool, и получить переменную с помощью геттера.
Если вам нужны переменные для всего приложения, вы можете поместить их в AppDelegate, но я настоятельно не рекомендую этого делать, поскольку это тесно связывает классы.
Создайте класс модели данных. Создайте его в своем делегате приложения и передайте в контроллеры представления. Используйте наблюдение за ключевыми значениями, чтобы отслеживать изменения модели в ваших контроллерах представления. См. Мой ответ здесь: Как отображать и рассчитывать числа из базы данных на iPhone?
«Почему бы мне не использовать глобальные переменные? Это не повредит только один раз». Это плохая привычка. Избегание глобальных переменных упрощает чтение и повторное использование кода, упрощает расширение и упрощает отладку.