Вызов методов делегата и вызов селекторов - PullRequest
0 голосов
/ 29 марта 2012

Я новичок в концепции делегатов и селекторов при использовании с уведомлениями. Итак, мой первый вопрос:

1) Допустим, у вас есть кнопка с делегатом, который реализует некоторый метод doWork. Если вам нужна та же функциональность, что и в методе, можно ли просто вызывать этот метод? Я не знал, считалось ли это хорошей практикой кодирования и / или нужно ли вам это делать или делать что-то другое для получения такого типа функциональности. Например, если это нормально, архитектура?

2) Точно так же с NSNotificationCenter я вижу некоторый код, который публикует уведомление. Тогда есть метод HandleSegmentedControl:(NSNotification *)notification. Если я хочу иметь эту функциональность вручную, но без нажатия элемента управления сегментами, можно ли просто взять эту функциональность из этого метода и поместить ее в новый метод, чтобы она выглядела так:

Оригинал:

- (void)HandleSegmentedControl:(NSNotification *)notification {
    NSDictionary *dict = [userInfo notification];
    // do stuff with the dictionary
}

Новое:

- (void)HandleSegmentedControl:(NSNotification *)notification {
     NSDictionary *dict = [userInfo notification];
     [self newMethod:dict];
}

- (void)newMethod:(NSDictionary *)dict {
    // do stuff with the dictionary
}

- (void)myOtherMethodThatNeedsTheSameFunctionality {
     NSDictionary *dict = // create some dictionary
     [self newMethod:dict];
}

Извините, если это основные вопросы. Я не уверен, что лучшие практики для таких вещей, и хотел начать правильно. Спасибо.

1 Ответ

0 голосов
/ 29 марта 2012
  1. Если протокол делегата реализует метод doWork в качестве обязательного метода, тогда да. Однако, если это необязательный метод, или если вы хотите быть более безопасным, вы должны использовать

    if ([delegate respondsToSelector:@selector(doWork)]) {
        [delegate doWork];
    }
    
  2. Конечно, это кажется разумным. Это распространенный способ сделать ваш код более надежным. UserInfo уведомления есть, так что вы можете отправлять данные, как вам нравится. Тем не менее, я думаю, что в вашем коде вы имели в виду [notification userInfo] не [userInfo notification].

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