objective-c 委托与协议
协议会制定若干的接口,这些接口并不需要自己实现,由遵守这个协议的类来实现。
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; }