Оба типа объектов ведут себя более или менее одинаково, вопрос в том, что они делают.
Объект типа делегата отвечает на действия, которые выполняет другой объект. Например, протокол UITableViewDelegate
имеет такие методы, как didSelectRowAtIndexPath
, для выполнения действий при выборе пользователем определенной строки в таблице.
Принимая во внимание, что объект типа источника данных передает данные другому объекту. Например, протокол UITableViewDataSource
имеет такие методы, как cellForRowAtIndexPath
и numberOfRowsInSection
, определяющие, что должно отображаться в таблице.
Между ними нет жесткой разницы с точки зрения компиляции, это просто стиль кодирования, чтобы сделать то, что объекты делают, очень ясно для пользователя кода.
РЕДАКТИРОВАТЬ:
Чтобы ответить на ваш второй вопрос: если вы хотите, чтобы каждое оповещение реагировало по-разному, вам нужно будет написать другого делегата для каждого оповещения. Например, если одно из ваших предупреждений является предупреждением о подтверждении сохранения (возможно, вы собираетесь перезаписать файл, и оно всплывает, чтобы подтвердить, что пользователь хотел бы это сделать), у вас будет такой объект, как:
@interface SaveConfirmAlertDelegate : NSObject<UIAlertViewDelegate>
@end
И в @implementation
для SaveConfirmAlertDelegate
вы бы реализовали правильную функцию сохранения в зависимости от того, какую кнопку пользователь нажал в предупреждении.
Когда вы создаете представление предупреждений, вы указываете, каким должен быть объект делегата, это не обязательно должно быть self
. Вы можете хранить своих четырех делегатов как разные объекты и устанавливать их в предупреждениях по мере необходимости.
Я надеюсь, что это проясняет ситуацию
person
Dan F
schedule
19.06.2012