Цель-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

Вкратце, у метода есть исключение.

Другие вопросы по тегам