Некоторые объекты оказываются глобально видимыми, т.е. они доступны для всех остальных объектов. Характерным тому примером служат объекты классов. Классы нередко содержат методы, поставляющие экземпляры одиночных объектов. Некоторые из этих одиночных объектов, в свою очередь, обладают свойствами, делающими другие объекты также глобально видимыми.

Например, любой объект может видеть экземпляр одиночного объекта типа UIApplica-tion, делая вызов [UIApplication sharedApplication]. Поэтому любой объект может также видеть основное окно приложения, поскольку это свойство keyWindow экземпляра одиночного объекта типа UIApplication. Кроме того, любой объект может видеть делегат приложения, поскольку это его свойство delegate. Эта цепочка продолжается далее: любой объект может видеть контроллер корневого представления приложения, поскольку это контроллер типа rootViewController основного окна, а оттуда можно перейти к иерархии контроллеров представлений и иерархии самих представлений, как пояснялось в предыдущем разделе.

Вы можете сделать свои объекты глобально видимыми, присоединив их к глобально видимому объекту. Открытое свойство делегата приложения, которое вы вольны создать, становится глобально видимым благодаря глобальной видимости делегата приложения, которое само оказывается общедоступным.

Глобально видимым является также общедоступный объект пользовательских настроек по умолчанию, получаемый в результате вызова [NSUserDefaults standardUserDefaults ]. Этот объект служит шлюзом для хранения и извлечения пользовательских настроек по умолчанию, аналогичных словарю (коллекции значений, именуемых по ключам). Пользовательские настройки по умолчанию автоматически сохраняются при выходе из приложения и автоматически доступны, когда приложение запускается на выполнение снова. Таким образом, эти настройки служат одним из способов сохранения информации между последовательными запусками приложения. Поскольку они глобально видимы, то служат также для передачи значений в самом приложении.

Например, в одном из моих приложений имеется настройка, называемая @"hazyStripy". Она определяет, следует ли отображать некоторый видимый интерфейсный объект с дымчатым или полосатый заполнением. Эту настройку пользователь может изменить, и для этой цели предоставляется интерфейс глобальных параметров настройки. Когда пользователь отображает этот интерфейс, то среди пользовательских настроек по умолчанию анализируется настройка @ "hazyStripy", чтобы настроить интерфейс в соответствии с ее состоянием. Если пользователь взаимодействует с интерфейсом глобальных параметров настройки с целью изменить настройку @"hazyStripy", то приложение реагирует на его действия, внося соответствующие коррективы в эту настройку среди пользовательских настроек по умолчанию.

Интерфейс глобальных параметров настройки — не единственный объект, в котором используется настройка @ "hazyStripy" среди пользовательских настроек по умолчанию. Она используется также в прикладном коде, где фактически рисуется объект с дымчатым или полосатым заполнением, и поэтому требуется знать, как рисовать этот объект. Следовательно, отпадает всякая необходимость в связи между объектом, который рисует объект с дымчатым

или полосатым заполнением, а также объектом, управляющим интерфейсом глобальных параметров настройки, чтобы они видели друг друга! Ведь оба эти объекта могут видеть общий объект, т.е. пользовательскую настройку по умолчанию @"hazyStripy" (рис. 13.1). Безусловно, пользовательскими настройками по умолчанию нередко злоупотребляют для хранения информации, которая используется не для поддержки пользовательских глобальных параметров настройки, а только как удобное место для размещения данных, глобально видимых для всех объектов.

 

  Глобальная видимость пользовательских настроек по умолчанию

Рис. 13.1. Глобальная видимость пользовательских настроек по умолчанию


 

 

 

Добавить комментарий