Делить код между классами в Objective-C без наследования? - PullRequest
1 голос
/ 06 июля 2011

Поскольку Objective-C не поддерживает множественное наследование, существует ли какой-то другой механизм для обмена кодом между классами?

Я пишу библиотеку Какао поверх существующей XML-схемы. Многие элементы в схеме (например,) используются в нескольких типах. Я надеялся как-то централизовать это, чтобы мне не пришлось добавлять @property NSString *name и связанный код для генерации xml для свойства name в каждом отдельном классе, который имеет атрибут name. Это было бы довольно просто, если бы поддерживалось множественное наследование, но я не знаю, как это сделать иначе.

Лучшее, что я могу придумать, - это создать общий суперкласс, который имеет расширенный набор методов для кодирования каждого необязательного свойства, а затем вызвать соответствующие методы (т. Е. encodeName) в методе кодирования для каждого класса. Похоже, это лучший путь?

Ответы [ 3 ]

1 голос
/ 06 июля 2011

Я бы порекомендовал вам создать новую категорию с вашими свойствами / функциями и т. Д. И добавить указанную категорию в NSObject.Это сделало бы все свойства и функции доступными для всех подклассов NSObject.Это не совсем множественное наследование, но обеспечивает большую гибкость.

0 голосов
/ 06 июля 2011

Если методы требуются только для определенных объектов, то, возможно, подкласс этого класса - это путь, или категория этого конкретного класса была бы лучше.Категория на NSObject достаточно широкая для разыгрывания.

Если вы хотите добавить дополнительное состояние, тогда подклассификация - это, вероятно, ваша самая безопасная ставка.

Если вы добавляете категорию, убедитесь, что вы добавили в свои методы что-то уникальное, чтобы избежать конфликтов.Например, PSMySpecialMethod в отличие от mySpecialMethod

0 голосов
/ 06 июля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...