Цель-c: Как я могу требовать переопределения и не вызывать супер?
Я думаю, это решается написанием @protocol.
Но я жажду знаний. Есть ли какой-нибудь флаг или другой способ требовать, чтобы подклассы переопределяли определенные методы и не вызывали super? Как противоположность NS_REQUIRES_SUPER / objc_requires_super?
3 ответа
Я делаю это в коде, не используя никаких флагов.
- Я добавляю утверждение в методе суперкласса, который должен быть переопределен в случае вызова этого метода
Здесь у меня есть класс, у которого есть метод fetchUserData
это должно быть переопределено дочерним классом
- (void)fetchUserData
{
NSString *descrip = [NSString stringWithFormat:@"child implementation for method:%@ : %@",NSStringFromSelector(_cmd), NSStringFromClass([self class])
NSAssert(NO, descrip);
}
Здесь есть некоторые вещи, которые должны быть полезны.
конкретно subclassResponsibility:
РЕДАКТИРОВАТЬ: Хороший момент в комментариях - GNUStep!= Фонд. Другими словами, методы на странице, на которую я ссылаюсь, должны использоваться с осторожностью. Тем не менее, я лично использовал subclassResponsibility:
и это работает.
Если я правильно понимаю, вы, по сути, спрашиваете, как создать абстрактный класс... заставляя подклассы реализовывать методы.
Проверьте: Создание абстрактного класса в Objective-C
Вкратце, у метода есть исключение.