Каков естественный способ выражения C ++ «защищенной виртуальной» идиомы в Objective-C? - PullRequest
1 голос
/ 18 октября 2010

В C ++ есть идиома метода шаблонов, когда базовый класс реализует все свои алгоритмы, но исключает некоторые крошечные небольшие различия (обычно связанные с форматами данных и т. Д.) Для подклассов, реализуемых в форме защищенных виртуальных методов, которые недоступны для клиентов иерархии.

Какой самый естественный способ выразить ту же идиому в Objective-C?

Спасибо.

Ответы [ 2 ]

1 голос
/ 18 октября 2010

Я бы создал отдельный заголовочный файл с категорией. Вы могли бы назвать эту категорию Protected:

@interface MyClass(Protected)
// Place your "protected" methods here.
@end

Обычные пользователи класса не будут #import этот файл, только файл основного класса. Но реализация и подклассы будут также #import файлом заголовка, содержащим категорию Protected.

Если методы являются необязательными, вы можете вместо этого использовать протокол:

@protocol MyClassProtected
// Required methods here.
@optional
// Optional methods here.
@end

Мне кажется, что это не такое хорошее решение, как категория, но оно бы сработало.

Тогда третий способ - просто воздержаться от соглашения: назовите ваши защищенные методы соответствующим образом:

@interface MyClass {
}

// This method is not to be called by users, but subclasses may
// overwrite to do something else.
- (void) protected_someMethodDoingFoo;
@end
0 голосов
/ 18 октября 2010

Мне кажется, что вы спрашиваете о концепции Java абстрактного класса.Помогает ли обсуждение абстрактных классов Objective C ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...