標籤:
古代希臘有個哲學家,他畢生只做三件事:“吃飯”“睡覺”“工作”。為了更好的生活,提高工作的效率,他決定找個徒弟,把這些事委託給徒弟做。然而要成為他的徒弟,需要實現一個協議,協議要求能夠處理睡覺,吃飯,工作這三件事,
這裡面涉及到三個對象:
第一: 哲學家 對應一個通用類 Philospher
第二: 協議 對應一個PhilospherDelegate 規定了三種方法 sleep eat work
第三: 徒弟 對應一個委派物件 ViewController
委託協議 :PhilospherDelegate.h
@protocol PhilosopherDelegate@required-(void) sleep;-(void) eat;-(void) work;@end
委託協議不需要.m檔案 可以定義在 其他的 .h檔案中
委託類 ViewController
#import <UIKit/UIKit.h>#import "PhilosopherDelegate.h"@interface ViewController : UIViewController<PhilosopherDelegate>@end
#import "ViewController.h"#import "Philosopher.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad{ [super viewDidLoad]; Philosopher *obj = [[Philosopher alloc ] init]; obj.delegate = self; [obj start];}- (void)didReceiveMemoryWarning{ [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}#pragma -- PhilosopherDelegate 方法實現-(void) sleep{ NSLog(@"sleep...");}-(void) eat{ NSLog(@"eat...");}-(void) work{ NSLog(@"work...");}@end
哲學家 Philosopher
#import "PhilosopherDelegate.h"@interface Philosopher : NSObject{ NSTimer *timer; int count;}@property (nonatomic, weak) id<PhilosopherDelegate> delegate;-(void) start;-(void) handle;@end
#import "Philosopher.h"@implementation Philosopher@synthesize delegate;-(void) start{ count= 0; timer = [NSTimer scheduledTimerWithTimeInterval:3.0 target:self selector:@selector(handle)userInfo:nil repeats:YES]; }-(void)handle{ switch (count) { case 0: [self.delegate sleep]; count++; break; case 1: [self.delegate eat]; count++; break; case 2: [self.delegate work]; [timer invalidate]; break; }}@end
iOS 委託模式 理解例子