id <delegate>в болтливом приложении - PullRequest
0 голосов
/ 03 января 2011

в болтливом приложении, если нашел это объявление, но я нигде не смог найти объяснения. id delegate

где RoomDelegate - это класс. Что здесь происходит?

Ответы [ 3 ]

2 голосов
/ 03 января 2011

Делегация простая и мощная шаблон, в котором один объект в Программа действует от имени или в согласование с другим объектом. делегирующий объект сохраняет ссылку на другой объект - делегат - и в соответствующее время отправляет сообщение к этому. Сообщение информирует делегат события, которое делегирующий объект собирается обрабатывать или только что обработал. Делегат может ответить на сообщение, обновив внешний вид или состояние себя или другого объекты в приложении и в в некоторых случаях он может вернуть значение, которое влияет на предстоящее событие обрабатываются. Основная ценность делегирования в том, что это позволяет легко настроить поведение нескольких объекты в одном центральном объекте. ( источник )

Делегаты должны соответствовать protocol.

id<ADelegatesProtocol> delegate означает, что объект delegate должен соответствовать протоколу ADelegatesProtocol

2 голосов
/ 03 января 2011

Делегаты - это распространенный способ общения между классами.Например, если вы хотите получать уведомление, когда объект завершил определенное действие, вы можете зарегистрировать свой класс в качестве делегата для этого объекта, и пока ваш класс реализует требуемый метод (ы) делегата, они будут вызываться автоматически.

В этом случае «делегат id» - это просто переменная экземпляра, которую рассматриваемый класс будет использовать для хранения ссылки на объект делегата.(т.е.: в нашем примере объект, который хочет получить информацию, когда определенное действие завершено / произошло событие.)

Если вы посмотрите на нижнюю часть файла интерфейса, вы, скорее всего, увидитеопределение требуемого протокола XXXDelegate - используется для определения необязательных и обязательных методов, которые должен реализовывать класс делегата.

1 голос
/ 04 января 2011

Я считаю, что проще всего объяснить это с помощью обычного делегата в UIKit, например UIAlertViewDelegate. Вот пример кода:

В вашем файле .h вы сказали бы, что ваш класс соответствует делегату, например:

@interface Foo : UIViewController <UIAlertViewDelegate> { // ...

Это сообщает компилятору, что класс Foo реализует некоторые или все методы делегата.

Когда вы создаете экземпляр UIAlertView, вы указываете, какой делегат для объекта:

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Title" 
                                                message:@"Message"
                                               delegate:self
                                      cancelButtonTitle:@"Okay"
                                      otherButtonTitles:@"Cancel", nil];
[alert show];
[alert release];

Обратите внимание, что мы говорим, что self является делегатом.

Теперь вы хотите реализовать необходимые методы:

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
    NSLog(@"%d got clicked", buttonIndex);
}

Для UIAlertView есть свойство типа id<UIAlertViewDelegate>, которое связывает это с вашим исходным вопросом.

Я довольно новичок в разработке Objective-C / iPhone, и одна вещь, которую я нашел очень полезной, - это поиск связанного xxxxDelegate в разделе «Обзор» класса. Вы обязательно найдете полезные (на других языках) события, которые запускаются для общих действий.

Надеюсь, это поможет!

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