您的位置:首页 > 移动开发 > Objective-C

objective-c 委托与协议

2012-08-31 23:28 411 查看
协议会制定若干的接口,这些接口并不需要自己实现,由遵守这个协议的类来实现。1.协议的定义:
@protocol MyProtocol <NSObject>
/* 若干接口(形式和类是一样的) */
-(void)function;
@end
一旦一个类被制定遵守这个协议,那么它就有责任去实现协议中的接口,不实现的话,xcode会给出警告。2.设置托管变量,这个变量放在触发协议的类中,也就是说这个类是决定调用协议接口的“时机”的
id<MyProtocol> delegate;
3.触发协议.当你什么需要实现协议中的方法的时候,可以这样调用
[delegate function];
4.遵守协议,这个类可以作为前面“触发协议的类”的“委托”类,他是帮助前者实现协议中的需求的
@interface Implclass:NSObject<MyProtocol>
5.实现方法,在“委托类”的实现部分加入接口的实现
-(void)funciton
{
//do something
}
6.指派委托,需要将delegate赋值为Implclass具体例子:假如baby想吃奶,这时候需要妈妈,就将需求(协议),委托给妈妈来做,让妈妈来帮助
@protocol baby_request <NSObject>

//吃奶
-(void)milk;

@end

//baby类
@interface Baby:NSObject
{
id<baby_request> somebody;
}

@property (nonatomic,assign) id<baby_request> somebody;
//想吃奶
-(void)wantmilk;

@end

@implementation Baby

@synthesize somebody;

-(void)wantmilk
{
[somebody milk];
}

@end

//母亲类
@interface Mother:NSObject<baby_request>

@end

@implementation Mother

//喂奶
-(void)milk
{
NSLog(@"feed milk ");
}

@end

int main (int argc, const char * argv[])
{

@autoreleasepool {

// insert code here...
NSLog(@"has a bady want milk");
Baby *baby = [[Baby alloc]init];
Mother *mother = [[Mother alloc]init];
[baby setSomebody:mother];
[baby wantmilk];
[baby release];
[mother release];
}
return 0;
}
From: http://www.cnblogs.com/z9train/archive/2012/07/16/2594281.html[/code] 
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: