程序如下:
协议部分:
//定义了一个拍卖的代理协议,里面有四个参数,分别是物主,拍卖物的名字,物主提供的价格,拍卖物年代
#import <Foundation/Foundation.h>
@protocol auctionDelegate <NSObject>
-(void)owner:(id)aowner
name:(id)aname
price:(int)aprice
times:(id)atimes;
@end
主人类:
<.h文件>
#import <Foundation/Foundation.h>
#import "auctionDelegate.h"
@class Company;
@interface Host : NSObject
{
NSString * _name;
NSString *_owner;
int _price;
NSString * _times;
BOOL _jewellery;//是否有宝贝
id<auctionDelegate> _delegate;//声明了一个代理
}
@property(nonatomic,assign)id<auctionDelegate>delegate;
@property(nonatomic,retain)NSString * name;
@property(nonatomic,retain)NSString*owner;
@property(nonatomic,assign)int price;
@property(nonatomic,retain)NSString * times;
@property(nonatomic,assign)BOOL jewellery;
-(id)initWithName:(NSString *)aName
Owner:(NSString *)aOwner
Price:(int)aPrice
Times:(NSString *)aTimes
Delegate:(id<auctionDelegate>)aDelegate
Jewellery:(BOOL)aJewellery;
-(void)adelegate;//协议传参实例方法
-(void)getinfo;//收到通知的反应
-(void)answer1:(Company *)c;//电话回复1
-(void)answer2;//电话回复2
@end
<.m>
#import "Host.h"
//定义了一个延展,里面含有一个私有方法
#import "Company.h"
@interface Host()
-(BOOL)treasure;
@end
@implementation Host
@synthesize delegate=_delegate;
@synthesize name=_name;
@synthesize owner=_owner;
@synthesize price=_price;
@synthesize times=_times;
@synthesize jewellery=_jewellery;
-(id)initWithName:(NSString *)aName
Owner:(NSString *)aOwner
Price:(int)aPrice
Times:(NSString *)aTimes
Delegate:(id<auctionDelegate>)aDelegate
Jewellery:(BOOL)aJewellery;
{
if(self=[super init])
{
self.name=aName;
self.owner=aOwner;
self.price=aPrice;
self.times=aTimes;
self.delegate=aDelegate;
self.jewellery=aJewellery;
//注册通知
NSNotificationCenter * center=[NSNotificationCenter defaultCenter];
[center addObserver:self selector:@selector(getinfo) name:@"auctionResult" object:nil];
}
return self;}
//如果有宝贝返回1,没有返回0
-(BOOL)treasure
{
BOOL value=0;
if(self.jewellery==1)
{
value=1;
}
return value;
}
//传参,如果有宝贝,才传参,没有则无法进行拍卖
-(void)adelegate
{
if([self treasure])
{
[self.delegate owner:self.owner name:self.name price:self.price times:self.times];
}
else
{
NSLog(@"没有宝贝提供拍卖");
}
}
//物主收到消息后的反应
-(void)getinfo
{
NSLog(@"%@:我已经知道了",self.owner);
}
//电话回复1
-(void)answer1:(Company *)c
{
NSLog(@"继续拍卖!");
[self.delegate owner:self.owner name:self.name price:c.money times:self.times];
}
//电话回复2
-(void)answer2
{
NSLog(@"我不拍卖了!");
}
//释放内存
-(void)dealloc
{
NSNotificationCenter * center=[NSNotificationCenter defaultCenter];
[center removeObserver:self name:@"auctionResult" object:nil];
[_name release];
[_owner release];
[_times release];
[super dealloc];
}
@end
公司类:
<.h>
#import <Foundation/Foundation.h>
#import "auctionDelegate.h"
@class Host;
@interface Company : NSObject<auctionDelegate>
{
//拍卖会现场提供的报价
int _money;
}
@property(nonatomic,assign)int money;
//在现场供价后,打电话给物主,是否继续进行拍卖
-(void)phone1:(Host *)h;
-(id)initWithMoney:(int)aMoney;
@end
;
<.m>
#import "Company.h"
#import "Host.h"
@implementation Company
@synthesize money=_money;
-(id)initWithMoney:(int)aMoney;
{
if(self =[super init])
{
self.money=aMoney;
}
return self;}
-(void)phone
{
//拍卖成功后,给物主发送通知
NSNotificationCenter * center=[NSNotificationCenter defaultCenter];
[center postNotificationName:@"auctionResult" object:self];
}
//实现协议方法
-(void)owner:(id)aowner name:(id)aname price:(int)aprice times:(id)atimes
{
NSLog(@"物主:%@,宝物名称:%@,价钱:%d,年代:%@",aowner,aname,aprice,atimes);
[self phone];
}
//正常拍卖,价格不可能和物主提供的价格一样,所以拍卖方进行了比较人性化的处理,打电话给物主
//如果价格相等,继续拍卖;如果大于物主价格,调用物主的第一通回复电话,如果小于,调用物主的第二桶电话
-(void)phone1:(Host *)h
{
if(self.money==h.price)
[h adelegate];
else if(self.money>=h.price)
{
[h answer1:self];
}
else if(self.money<h.price)
[h answer2];
}
启发:如果代理不遵守协议,oc是支持强行将不遵守协议的对象作为代理的;
我是一个菜鸡,如果上面有错误或者可优化之处,请各位不吝赐教。