В этой главе мы снова рассмотрим три основных аспекта Objective-C, представленных вкратце в главе 5: методы доступа, механизм доступа к значениям по ключам и свойства. Но на этот раз мы обсудим их углубленно и досконально. Это будет сделано с учетом их особой роли в одном из самых важных и ключевых аспектов среды Cocoa: управлении памятью для хранения экземпляров классов языка Objective-C.

Методы доступа

Метод доступа служит для получения и установки значения переменной экземпляра. Метод доступа, получающий значение переменной экземпляра, называется get -методом, а метод доступа, устанавливающий значение переменной экземпляра, — set-методом.1

Методы доступа важны отчасти потому, что переменные экземпляра по умолчанию защищены (см. главу 5), тогда как открыто объявляемые методы — общедоступны. Без открытых методов доступа защищенная переменная экземпляра оказывается недоступной для любого объекта, в классе (или суперклассе) которого эта переменная экземпляра не объявлена.

Из сказанного выше возникает искушение сделать следующий вывод: нет никакой нужды создавать метод доступа к переменной экземпляра, не предназначенной для общего доступа, и в какой-то степени такой вывод обоснован. Но в современной версии языка Objective-C создать методы доступа так же просто, как и объявить переменную экземпляра: достаточно объявить свойство, чтобы переменная экземпляра автоматически появилась вместе с методами доступа к ней, т.е. без единой строки написанного вручную кода методов доступа. Если же вы напишете такой код, то сможете согласованно решать дополнительные задачи, связанные со значением переменной экземпляра.

Для методов доступа приняты соглашения об именовании, которые следует соблюдать. Эти соглашения просты и поясняются ниже.

 

Get-мгтод

Имя метода установки должно начинаться с префикса set, после которого следует начинающийся с прописной буквы вариант имени переменной экземпляра (без начального знака подчеркивания, если таковой присутствует в имени переменной экземпляра). Метод доступа должен принимать единственный параметр: новое значение, присваиваемое переменной экземпляра. Так, если переменная экземпляра называется myVar (или _myVar), то метод установки ее значения должен называться setMyVar:.

Set-Memod

Этот метод должен называться по имени переменной экземпляра (без начального знака подчеркивания, если таковой присутствует в имени переменной экземпляра). Такое обозначение не вызовет никаких недоразумений ни у вас, ни у компилятора, поскольку имена переменной экземпляра и get-метода для получения ее значения используются в совершенно разных контекстах. Так, если переменная экземпляра называется myVar (или _myVar), то метод установки ее значения должен называться MyVar.

Если переменная экземпляра принимает логическое значение BOOL, то в начале имени get-метода можно дополнительно указать префикс is (например, get-метод для получения значения переменной экземпляра showing или _showing может называться isShowing), хотя делать это совсем не обязательно.

Соглашения об именовании методов доступа позволяют языковым средствам Objective-C вызывать эти методы только по одному имени. Доступ к значениям по ключам начинается с символьной строки и продолжается вызовом методов доступа. Кроме того, для вызова метода доступа можно использовать имя свойства. Все это становится возможным благодаря принятым соглашениям об именовании методов доступа.

Более того, соглашения об именовании, по существу, обеспечивают методам доступа самостоятельное существование независимо от любой переменной экземпляра. Если методы доступа уже имеются, то нет таких правил, которые обязывали бы называть их по имени настоящих переменных экземпляра! Напротив, можно намеренно создать методы myVar и setMyVar: в отсутствие переменной экземпляра myVar (или _myVar).

Это может быть сделано, например, для того, чтобы методы доступа подспудно выполняли совсем другие функции, маскируя настоящее имя переменной экземпляра, если она существует. Тем не менее все зависящие от методов доступа языковые средства Objective-C продолжают действовать благодаря принятым соглашениям об именовании. По существу, методы доступа служат фасадом, за которым от вызывающего кода скрываются любые внутренние подробности о возможном существовании определенных переменных экземпляра.


 

 

 

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