Если категории настолько сильны, когда самое подходящее время для подкласса класса iOS?

С такими мощными категориями, что можно добавлять методы, а также ассоциации. которые могут добавлять дополнительные свойства и переменные, действительно трудно увидеть значение подклассов в Objective C.

С таким количеством категорий с открытым исходным кодом, созданных в открытом исходном коде, я действительно не вижу смысла в подклассе. Ассоциации также могут обеспечивать цепочку вызовов (внутри реализации свойства ассоциации), поэтому нет реальной необходимости в наследовании.

Может ли кто-нибудь предоставить точный вариант использования, когда я хочу создать MyLabel, расширяющий UILabel, или MyString, расширяющий NSString?


person Nirav Bhatt    schedule 27.12.2015    source источник


Ответы (3)


  • Подклассы могут безопасно переопределять методы суперкласса; категории не могут.
  • Подклассы настраивают поведение только экземпляров нового класса, а не всех экземпляров суперкласса.
  • Подклассы объявляют о намерениях так, как это не могут сделать коллекции категорий.
person Avi    schedule 27.12.2015

Вам нужно использовать подклассы, если вы не хотите расширять существующие классы.

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

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

person Alexander Perechnev    schedule 27.12.2015

В общих чертах:

  • Категории используются для добавления методов и т. д. и применяются ко всем экземплярам суперкласса... Итак, все, начиная с NSString, например.
  • Подклассы могут добавлять/переопределять (изменять) части и могут применяться к конкретным экземплярам класса, а не ко всему из NSString.
person Joe Benton    schedule 27.12.2015