Как правильно подходить к переносу / переписыванию этой библиотеки? - PullRequest
1 голос
/ 22 марта 2011

Я пытаюсь переписать библиотеку Java в Objective-C. Я хотел бы переписать его как API, чтобы некоторые методы требовали реализации. Я начал пытаться переписать код, но столкнулся с несколькими вопросами.

  • Поддерживает ли Objective-C абстрактные классы?

  • Если нет, то должен ли я писать протоколы или просто использовать свои собственные классы? Я знаю, что вы можете отметить необходимые методы.

  • Если я пишу протоколы, будет ли хорошо, если я сгруппирую все протоколы в один заголовочный файл, или лучше не делать этого?

  • Если я использую свои собственные классы, есть ли способ требовать подкласса абстрактных методов?

Ответы [ 2 ]

2 голосов
/ 22 марта 2011

В Objective-C существуют абстрактные классы с принудительной компиляцией, а вам нужны протоколы.

Я бы лично разбил протоколы на несколько заголовков для удобочитаемости.

1 голос
/ 22 марта 2011

Нет встроенной поддержки для создания абстрактных классов, но вы можете сделать это, переопределив метод allocWithZone:.

+ (id)allocWithZone:(NSZone *)zone {
    if([self class] == [MyAbstractClass class]) { // Check if it is a subclass or not
        NSLog(@"MyAbstractClass is an abstract superclass and should not be allocated directly. Use a concrete subclass instead.");
        return nil;
    }
    return [super allocWithZone:zone];
}
...