デリゲートって何?
今日は「非形式プロトコル」で出てきた、デリゲートについてです。
「詳解 Objective-C 2.0」の「14-01 デリゲート」を読んでみるとよくわかります。オブジェクト指向プログラミングでいう「委譲」っちゅうやつですね。もしくは、コールバック関数って感じで、デフォルトの実装を提供してもしなくても良いし、それの代わりに処理を行うものが指定されていれば、それを呼び出すという。
その話は良い本を読むなりしましょうというわけで、簡単に例だけ書いてみました。
#import <Foundation/Foundation.h> @interface MyObject1 : NSObject { id delegate; } - (void)hello; - (void)setDelegate:(id)anObject; @end @implementation MyObject1 - (void)hello { if (delegate == nil) { NSLog(@"Hello"); } else if ([delegate respondsToSelector:@selector(hello)]) { [delegate hello]; } } - (void)setDelegate:(id)anObject { delegate = anObject; } @end @interface MyObject2 : NSObject - (void)hello; @end @implementation MyObject2 - (void)hello { NSLog(@"こんにちは"); } @end int main (int argc, const char * argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; MyObject1* myObject1 = [[[MyObject1 alloc] init] autorelease]; // 以下 2 行を有効にすると、myObject1 は myObject2 に処理を移譲し、"こんにちは" が表示される // MyObject2* myObject2 = [[[MyObject2 alloc] init] autorelease]; // [myObject1 setDelegate:myObject2]; [myObject1 hello]; [pool drain]; return 0; }
デリゲート(myObject2)を指定しなければ myObject1 の hello メソッドが呼び出されて “Hello” と表示されるし、デリゲートを指定すればその hello メソッドが呼び出されて “こんにちは” が表示される、という感じ。
こんなもんスよね。
About this entry
You’re currently reading “ デリゲートって何? ,” an entry on forever 5 years old blog
- Published:
- 3.5.09 / 10pm
- Category:
- Programming
No comments
Jump to comment form | comments rss [?] | trackback uri [?]