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

 

[self setTheData: d];

self.theData = d;

В следующих строках кода представлены равнозначные способы вызова метода для получения значения свойства.

 

d = [self theData];

d = self.theData;

 

Именно объявление метода доступа позволяет использовать соответствующую запись свойства. В частности, объявление метода установки дает возможность использовать запись свойства в левом значении выражения для его присваивания свойству, а объявление get-Me-тода — использовать запись свойства в правом значении выражения для его извлечения из свойства.

Свойство можно объявить и явно вместо того, чтобы объявлять get- и set-методы. Следовательно, объявление свойства служит в качестве сокращенного способа объявления методов доступа, как, впрочем, и для сокращенного вызова этих методов. Объявление свойства позволяет добиться много большего в прикладном коде, а насколько больше — это зависит от конкретной системы и применяемой версии Xcode. Возможности объявления свойства перечислены ниже по порядку увеличения их потенциала, что отражает историю их внедрения.

  • Объявление свойства избавляет от необходимости объявлять методы доступа. Ведь намного проще объявить одно свойство, чем два метода доступа.
  • В объявление свойства включается оператор, определяющий стратегию управления памятью для метода установки. Это дает вам как программисту возможность легко выяснить, взглянув только на объявление свойства, каким образом будет интерпретироваться входящее значение. В противном случае для этого придется заглядывать в исходный код метода установки. Если метод установки принадлежит встроенному классу Cocoa, то вам не удастся этого сделать. Даже в своем коде не так-то просто обратиться за непосредственной справкой к нужному методу установки.
  • С помощью объявления свойства можно дополнительно опустить написание одного или обоих методов доступа. Компилятор сделает это автоматически! Для этого достаточно ввести директиву Gsynthesize в раздел реализации класса. Вполне естественно, что такой автоматически конструируемый метод доступа называется синтезированным.
  • Написание методов доступа — это непростое и чреватое ошибками занятие, поэтому следует выгодно пользоваться любой возможностью для автоматического написания правильного кода. Более того, это не потребует от вас никаких усилий, если созданный вами класс совместим с механизмом доступа к значениям по ключам для имени метода доступа. Кроме того, стратегия управления памятью для метода установки, указанная в объявлении свойства, соблюдается синтезированным методом установки. Любое ваше желание для среды Cocoa закон!
  • С помощью синтезированного метода доступа можно дополнительно опустить объявление переменной экземпляра, получаемой или устанавливаемой методом доступа, поскольку такое объявление делается неявно и автоматически! Неявное автоматическое объявление переменных экземпляра было внедрено как часть главного усовершенствования в языке Objective-C. В документации прежний период развития этого языка, когда переменные экземпляра приходилось объявлять самостоятельно, даже с помощью объявленного свойства и синтезированного метода, называется “устаревшей средой исполнения”, а позднейший период, когда стало возможным автоматическое неявное объявление переменных экземпляра, — “современной средой исполнения”. Как часть директивы ©synthesize можно указать имя переменной экземпляра, которая объявляется неявно и автоматически.
  • Максимальные удобства предоставляет современный компилятор LLVM, начиная с версии 4.0 (Xcode 4.4). Теперь можно вообще опустить директиву @synthesize, поскольку компилятор вводит ее неявно и автоматически! Это так называемый автоматический синтез.
  • Единственный недостаток автоматического синтеза заключается в том, что из-за пропуска директивы ©synthesize просто негде указать имя автоматически объявляемой переменной экземпляра. Впрочем, это не такой уж и крупный недостаток, поскольку имя переменной экземпляра предоставляется согласно простому правилу, чего оказывается достаточно в большинстве случаев.

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


 

 

 

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