1> 定义一个协议,里面声明代理类需要实现的方法列表
2> 创建一个代理类,遵守上面的代理协议
3> 在需要代理的类中,定义一个对象 类型为id且遵守代理协
议的成员变量(delegate)
4> 在Baby类中调用成员变量delegate(代理)的方法,调用代理类的方
法
5> main.m或其他使用类的文件中,为类的成员变量(代理
类)赋值
具体实现代码 : 购买电影票
协议.h
#import <Foundation/Foundation.h>
@protocol BuyFilmTicket <NSObject>
//声明一个买票协议
-(int)buyFilmTicket;
@end
APP.h
#import <Foundation/Foundation.h>
#import "BuyFilmTicket.h"
//商家遵守买票协议
@interface App : NSObject<BuyFilmTicket>
//商家买票声明
-(int)buyFilmTicket;
@end
APP.m
#import "App.h"
@implementation App
-(int)buyFilmTicket
{
int pmoney;
int count;
NSLog(@"请输入您要购买的票数");
scanf("%d",&count);
NSLog(@"请您付钱");
scanf("%d",&pmoney);
if(pmoney>=count*50){
int yue = pmoney-count*50;
NSLog(@"我们给你买了%d张票,并赠送爆米花,您的余额是:%d",count,yue);
}
return count;//程序遇到return或者'}'结束
}
@end
person.h
#import <Foundation/Foundation.h>
#import "BuyFilmTicket.h"
#import "App.h"
@interface Person : NSObject
//声明需要代理的对象必须遵守的协议
//人要看电影
-(void)seeTheFilm;
@property(nonatomic,weak)id<BuyFilmTicket>delegate;
@end
person.m
#import "Person.h"
@implementation Person
-(void)seeTheFilm
{
[self.delegate buyFilmTicket];
}
@end
main.m
#import <Foundation/Foundation.h>
#import "Person.h"
#import "App.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Person *p = [[Person alloc]init];
App *a = [[App alloc]init];
p.delegate = a;
[p seeTheFilm];
}
return 0;
}
|
|