Может ли кто-нибудь сказать мне, когда использовать категории и когда использовать подклассы в Objective-C? Также, пожалуйста, расскажите мне о преимуществах и недостатках.
Когда использовать категории и когда использовать подклассы?
Ответ 1
Категория objective-c полезна, если вы хотите изменить поведение ВСЕХ экземпляров класса с минимальным кодом. Подкласс более полезен, если вы хотите изменить поведение только определенных экземпляров и сохранить исходный метод для других.
Категории могут быть опасными, особенно если вы не можете просмотреть исходный код исходного метода, поэтому обычно вы должны использовать подклассы для сторонних и частных фреймворков, а не для категории.
Ответ 2
Категория: Используется, если мы хотим добавить какой-либо метод в данный класс, источник которого неизвестен. Это в основном используется, когда мы хотим изменить поведение любого класса.
Например: если мы хотим добавить метод в NSString для изменения строки, мы можем перейти к категориям.
Подкласс: если мы хотим изменить состояние, а также поведение любого класса или переопределить любые методы для изменения поведения родительского класса, тогда мы перейдем к подклассу.
Например: Мы подклассифицируем UIView для изменения его состояния и поведения в нашем iOS-коде.
Ответ 3
Добавление к сказанному. Подкласс - лучший вариант для настройки, а категории лучше использовать, когда вы просто хотите добавить некоторые функции к существующим классам.
Ответ 4
-
Вы хотите изменить что-то, что происходит в рамках структуры вызовы в течение жизненного цикла объекта пользовательского интерфейса? Используйте подкласс. Override соответствующие методы, такие как init, drawrect, layoutsubviews и т.д.
-
Вы хотите, чтобы какое-то приложение было широко распространено, что находится в дополнение к существующей функциональности, и вам все равно, если это становится доступным для всех экземпляров этих ранее существовавших экземпляров класса framework? Используйте категории. Пример: анимация UILabel при определенных действиях пользователя и применение этой анимации через ваше приложение ко всем экземплярам UILabel.