2013-09-12 2 views
-1

Мой вопрос довольно прост.Категории и переменные

В Objective C, в чем причина, почему у нас нет переменных? Если мы игнорируем работу вокруг, такую ​​как ассоциативная ссылка, расширение, динамические свойства и т. Д., Какова цель, не позволяющая переменным в категориях

+0

Почему вниз голос ????? –

ответ

2

Если вы хотите добавить переменные в существующий класс, используйте Подкласс.

Если вы хотите просто добавить свои собственные методы в существующие классы, используйте Категории.

Категории могут быть использованы, чтобы объявить либо методы экземпляра класса или методы, но как правило, не пригодны для объявления дополнительные свойства. Допустимый синтаксис включает объявление свойства в интерфейсе категории , но невозможно объявить дополнительную переменную экземпляра в категории. Это означает, что компилятор не будет синтезировать любую переменную экземпляра, а также не будет синтезировать любое свойство методов доступа. Вы можете написать свои собственные методы доступа в реализации категории , но вы не сможете отслеживать значение для этого свойства, если оно уже не сохранено исходным классом .

Единственный способ добавить традиции имущественным при поддержке нового экземпляра переменной в существующий класс использовать расширение класса, как описано в разделе «Class Extensions Extend the Internal Implementation.»

Какова цель за не допуская переменные в Категории?

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

С другой стороны, при использовании подкласса класс скомпилируется одновременно с расширением класса.

source

+0

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

+0

Я только что обновил свой ответ – Simon

+0

Хорошо. Ях. В этом есть смысл. –

0

Категория предоставляет возможность добавлять функциональные возможности класса SDK. Прежде всего, почему нам нужны категории, мы можем расширить класс, чтобы добавить к нему функциональность и данные.

Предположим, вы хотите расширить некоторые функции UINavigationController, вы можете подклассы и добавить все ваши требования. Но UINavigationController также является частью некоторых элементов управления SDK, например. UIImagePickerController и другие вкладки в UITabBarController. Что вы собираетесь делать с этим контроллером навигации, к которому у вас нет доступа.

Смотрите мой блог подробности http://muhammadzahidimran.com/2016/12/09/adding-data-to-sdk-classes-using-categories/

Смежные вопросы