<UIScrollViewDelegate>
クラスがプロトコルに準拠していると言っています。UIScrollViewDelegate
UIScrollViewDelegate
これが実際に意味することは、クラスがプロトコル内で定義されたすべての必要なメソッドを実装する必要があるということです。そのような単純な。
必要に応じて、クラスを複数のプロトコルに適合させることができます。
@implementation MyClass : UIViewController <SomeProtocol, SomeOtherProtocol>
クラスをプロトコルに準拠させる目的は、a) 型をプロトコルの準拠として宣言することです。これにより、この型を の下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
ドキュメント.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