Я создаю интерфейс / протокол, который будет использоваться для представлений сетки iOS. Я пытаюсь инкапсулировать как можно больше информации внутри класса, оставляя очень мало информации пользователю класса и его подклассов. Я застрял в том, каким должен быть метод обратного вызова или делегат. В C или C ++ я бы потребовал, чтобы указатель на функцию передавался в качестве параметра для метода, который будет вызываться при событии ретуши. В Objective C (в котором я новичок) меня озадачивают блоки и селекторы. Из того, что я видел, Apple использует селекторы. Таким образом, этот класс должен требовать, чтобы метод был установлен в качестве селектора для того, что произойдет при обнаружении события касания. Я не хочу расширять подклассы, так как это ограничит возможность повторного использования и заставит выполнять больше кодирования каждый раз, когда используется этот интерфейс. Я включаю ограниченный код того, что я сделал до сих пор, используя селектор, но я открыт для предложений о том, как то же самое можно сделать с блоком вместо этого и почему это было бы лучше. Я не тестировал это, в настоящее время разрабатываю.
@protocol Grid <NSObject>
@required
/*! @brief Initializer for base class */
- (id) init:(UIView *)parent withSelector:(SEL)selector;
/*! @brief Draw the actual view */
- (void) draw:(CGRect) rect;
/*! @brief Reload the data */
- (void) reload;
@end
Название вводит в заблуждение, и с тех пор, как я разместил этот вопрос, я получил лучшее представление о том, как все работает в Objective-C. Речь идет об абстрагировании базовых классов, наследовании и полиморфизме, а не о настройке селекторов как свойств или делегатов.