协议,就是使用了这个协议后就要按照这个协议来办事,协议要求实现的方法就一定要实现。
委托(代理),顾名思义就是委托别人办事,就是当一件事情发生后,自己不处理,让别人来处理。
1. 同时用到协议及委托
有两个类,一个是控制器类,一个是view类
当用户操作view时,需要通知控制器,让控制器去处理一些逻辑时,需要用到委托及协议
controller.h
#import "view.h"
@interface Controller:NSObject<TestDelegate>{
View* _view;
}
@end
controller.m
@implement
-(void) viewDidLoad
{
view =[ [View alloc] init];
view.delegate = self; //这里用到委托,意思就是View把事情交给Controller去处理。 体现出MVC的思想
}
// View 其实并没有实现testMethod1及testMethod2, 在这里实现
-(void) testMethod1
{
//deal logic
}
-(void) testMethod2
{ //deal logic
}
view.h
@protocol TestDelegate
-(void) testMethod1
-(void) testMethod2
@end
@interface View:NSObject{
id <TestDelegate> delegate;
}
view.m
#implement
// 处理view上的一些用户事件
-(void)OnAction1
{
[delegate testMethod1];
}
-(void)OnAction2
{
[delegate testMethod2];
}
@end
2. 单独用到协议
可以看一下NSObject类,这是所有objectc 类的基类,它实现了<NSObject> 协议
当有一个类NSString* str;
可以[str retain];
retain 就是NSObject协议里指定的一个方法,而并不是NSObject类的成员方法
我相信在NSObject类里有
-(id) retain
{
// some code
return self;
}
NSObject类会去实现这个方法,因为这个方法是NSObject协议里规定的。
学过C++的人 会有所体会这里的协议 有点像C++里的抽象类。这样是否会有助于理解?