1)雇主与委托者共同参与一个处理,说白了就是调用雇主方法的时候在雇主的方法内不但有相应的逻辑处理,还得请求委托者的方法共同处理
2)请求委托者的方法时要将自己传递过去,也就是说把自己当作一个入参传递过去,当然也可以有不同的实现,只是委托者能获得雇主就可以
#import <Cocoa/Cocoa.h>
/**
*委托的Demo
*
*@author 肖浩
**/
//委托类,委托类没有任何方法声明,它只需实现非正规协议的中需要的方法
@interface DemoDelegate : NSObject
@end //DemoDelegate
//雇主类
@interface Demo : NSObject {
//委托类
DemoDelegate *demoDelegate;
}
-(void) setDemoDelegate : (DemoDelegate *) delegate;
-(void) sendMessage;
@end //Demo
//NSObject的WSDelegate类别,定义非正规协议
@interface NSObject (WSDelegate)
-(void) setDemoDelegate : (DemoDelegate *) delegate;
-(void) handlerDelegate : (Demo *) demo;
@end //WSDelegate
@implementation Demo
-(void) setDemoDelegate : (DemoDelegate *) delegate {
[delegate retain];
[demoDelegate release];
demoDelegate = delegate;
}
//通知委托类方法执行
-(void) sendMessage {
[demoDelegate handlerDelegate : self];
}
-(void) dealloc {
[demoDelegate release];
[super dealloc];
}
@end //Demo
@implementation DemoDelegate
//相应的委托方法
-(void) handlerDelegate : (Demo *) demo {
NSLog(@"%@", demo);
}
@end //DemoDelegate
int main (int argc, char *argv[]) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
Demo *demo = [[Demo alloc] init];
DemoDelegate *delegate = [[DemoDelegate alloc] init];
[demo setDemoDelegate : delegate];
[demo sendMessage];
[pool release];
return (0);
}
当然,上面的代码注释没有写的特别详细,因为相信如果你在学习Objective-C的委托,那么你一定掌握了Objective-C的基本知识, 上面的代码是很简单的,你肯定可以看的懂,这些都是我综合资料之后总结的概念,如果哪里有不对的地方还希望和大家多交流,希望对大家有帮助.