协议的代理模式
#import <Foundation/Foundation.h>
@protocol TicketDelegate <NSObject>
//返回票价
- (double) ticketPrice;
//还剩多少张票
- (int) leftTicketsNumber;
@end
#import <Foundation/Foundation.h>
#import "TicketDelegate.h"
@interface Person : NSObject
@property (nonatomic,retain) id<TicketDelegate> delegate;
- (void) buyTicket;
//拥有一个代理属性
//id代表代理的类名随便
//但必须遵守TicketDelegate协议
@end
#import "Person.h"
@implementation Person
//买票
- (void) buyTicket
{
//叫代理去帮自己买票
double price = [_delegate ticketPrice];
int number = [_delegate leftTicketsNumber];
NSLog(@"通过代理的帮忙,票价=%f,还剩%d张票", price, number);
}
- (void)dealloc
{
[_delegate release];
[super dealloc];
}
@end
#import <Foundation/Foundation.h>
#import "TicketDelegate.h"
@interface Agent : NSObject <TicketDelegate>
@end
#import "Agent.h"
@implementation Agent
//剩余的票数
- (int)leftTicketsNumber
{
return 1;
}
//每张票多少钱
- (double)ticketPrice
{
return 100;
}
@end
#import <Foundation/Foundation.h>
#import "Person.h"
#import "TicketDelegate.h"
#import "Agent.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
// 创建一个Person类的对象
Person *p = [[Person alloc] init];
Agent *a = [[Agent alloc] init];
p.delegate = a;
[p buyTicket];
}
return 0;
}