Объект может быть делегатом к нескольким delegators?

Хорошо. Вот другой. Динамический Обзор . Об этом говорили немного в различном сообщении, но я не видел его здесь на скрытых функциях.

Динамический Обзор как Autovivification имеет очень ограниченную сумму языков, которые используют его. Perl и язык Common LISP являются только двумя, я знаю того использования Динамический Обзор.

11
задан clint 12 August 2009 в 06:43
поделиться

4 ответа

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

Синтаксис, однако, такой:

@interface my_projectViewController : UIViewController <DelegatorOne, DelegatorTwo> {
  ...
}

] У меня есть один, который выглядит так:

@interface MyViewController : UIViewController<UITextFieldDelegate,UIWebViewDelegate,UINavigationBarDelegate,UIActionSheetDelegate,URLDownloaderDelegate> {

}

С уважением,

24
ответ дан 3 December 2019 в 02:02
поделиться

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

В очень надуманном примере у вас может быть объект, который делегирует другой объект, который не соответствует протоколам:

#import "ObjectB.h"

@interface ObjectA : NSObject {
    ObjectB *delegate;
}
@end

// ...

@interface ObjectB : NSObject { }
 - (void)delegateMethod;
@end

В этом примере экземпляры ObjectA ожидают экземпляр ObjectB в качестве своего «делегата», хотя ObjectB на самом деле не протокол, а интерфейс класса! Существование объекта в качестве делегата - это скорее настроение, чем строгое требование наличия протокола - это просто большая часть (хорошо, почти все) разработчики возьмут методы делегата и разделят их на протокол, чтобы несколько объектов могли стать делегатами для экземпляров ObjectA, вместо того, чтобы требовать, чтобы делегат был экземпляром (или подклассом) ObjectB. Это также устраняет необходимость для ObjectA "знать" ObjectB в смысле #import в его заголовочном файле.

В чуть менее надуманном примере объект может соответствовать протоколу, не будучи делегат. Подумайте о протоколе NSCopying как о прекрасном примере - все, что говорит протокол, - это объекты, которые его реализуют, и могут быть скопированы с помощью метода copy . Люди не считают copy методом «делегата», поскольку ни один объект не скажет просто [делегировать копию] , не сделав что-нибудь с этой копией,

6
ответ дан 3 December 2019 в 02:02
поделиться

В дополнение к тому, что было сказано о реализации нескольких протоколов делегирования, шаблон делегирования Какао позволяет объекту легко стать делегатом для нескольких объектов одного типа. Вот почему большинство методов делегата включают указатель на вызывающий объект либо как параметр, либо как объект NSNotification. Вы можете использовать его для получения дополнительной информации об объекте или сравнить его с переменной экземпляра, чтобы выяснить, какое действие следует предпринять.

2
ответ дан 3 December 2019 в 02:02
поделиться

Ваш синтаксис не совсем правильный, но очень возможно, чтобы один объект действовал как делегат для нескольких клиентов.

Примерно так:

@interface MyViewController: UIViewController <protocol1, protocol2> 
{
}
@end

... должно работать

3
ответ дан 3 December 2019 в 02:02
поделиться