<UIScrollViewDelegate>
говорит, что класс соответствуетUIScrollViewDelegate
протокола.
Это действительно означает, что класс должен реализовать все необходимые методы, определенные в протоколе UIScrollViewDelegate
. Просто как тот.
Вы можете соответствовать своему классу к нескольким протоколам, если вам нравится:
@implementation MyClass : UIViewController <SomeProtocol, SomeOtherProtocol>
Цель соответствующего класс для протокола является: а) объявить тип как совместимый протокол, так что вы можете теперь классифицируйте этот тип под id <SomeProtocol>
, что лучше для делегированных объектов, к которым могут принадлежать объекты этого класса, и b) он сообщает компилятору не предупреждать вас о том, что реализованные методы не объявлены в заголовочном файле, поскольку ваш класс соответствует протокол.
Вот пример:
Printable.h
@protocol Printable
- (void) print:(Printer *) printer;
@end
Document.h
#import "Printable.h"
@interface Document : NSObject <Printable> {
//ivars omitted for brevity, there are sure to be many of these :)
}
@end
Document.m
@implementation Document
//probably tons of code here..
#pragma mark Printable methods
- (void) print: (Printer *) printer {
//do awesome print job stuff here...
}
@end
Вы могли тогда есть несколько объектов, которые соответствуют протоколу Printable
, который затем может быть использован в качестве переменной экземпляра, скажем, в PrintJob
объекта:
@interface PrintJob : NSObject {
id <Printable> target;
Printer *printer;
}
@property (nonatomic, retain) id <Printable> target;
- (id) initWithPrinter:(Printer *) print;
- (void) start;
@end
@implementation PrintJob
@synthesize target;
- (id) initWithPrinter:(Printer *) print andTarget:(id<Printable>) targ {
if((self = [super init])) {
printer = print;
self.target = targ;
}
return self;
}
- (void) start {
[target print:printer]; //invoke print on the target, which we know conforms to Printable
}
- (void) dealloc {
[target release];
[super dealloc];
}
@end
Чтобы прояснить ответ Якоба ... Причина, по которой вы бы использовали делегат, заключалась в том, чтобы назначить класс для обработки конкретных задач, на которые полагается объект UIScrollView, чтобы выполнять свою работу должным образом. В условиях мирян вы могли подумать об этом как о личном помощнике. Босс слишком занят, чтобы заботиться о том, как устроен обед, поэтому у него есть делегат (его секретарь или такой), который он призывает заказать обед для своей команды на важной встрече. Он просто говорит: «Эй, Джуди, нам нужен обед на 5 человек, вот что они хотят», Джуди затем берет эту информацию и делает все, что нужно сделать, чтобы получить обед. – 2010-12-06 06:39:45