1

混乱しています - デリゲートの目的が理解できません。

デフォルトで作成される Application Delegate は理解できますが、場合によっては次のようなものを見てきました。

@interface MyClass : UIViewController <UIScrollViewDelegate> {
    UIScrollView *scrollView;
    UIPageControl *pageControl;
    NSMutableArray *viewControllers;
    BOOL pageControlUsed;
}

//...

@end

は何の<UIScrollViewDelegate>ためですか?

それはどのように機能し、なぜ使用されるのですか?

4

2 に答える 2

12

<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
于 2010-12-06T06:27:53.857 に答える
2

Delegate Patternを理解する必要があると思います。iphone/ipadアプリで使われるコアパターンで、理解していないと先に進めません。私が使用したウィキペディアへのリンクは、パターンの概要を説明し、Objective C を含むその使用例を示しています。また、iPhone に固有のApple の概要チュートリアルも参照してください。また、デリゲート パターンについても説明しています。

于 2010-12-06T06:54:16.150 に答える