------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
OC中得协议
OC中没有接口的概念,取而代之的是协议,在协议里边可以声明一些方法,这些方法有的是必须实现的,有的是选择实现的方法。
关键字:
protocol----------协议关键字
required---------声明方法的关键字(默认的---必须实现)
optional---------声明方法的关键字(选择实现)
协议的使用方法
1)声明一个协议
#import <Foundation/Foundation.h>
//协议默认采纳NSObject协议
@protocol baseAction <NSObject>
//必须实现的方法,关键@required可以省略
-(void)run;
-(void)eat;
//选择实现方法
@optional
-(void)dongmian;
@end
#import <Foundation/Foundation.h>
#import "baseAction.h"
@interface Person : NSObject<baseAction>
@end
3)实现协议的方法(有些是必须实现的,有些是选择实现的)
#import "Person.h"
@implementation Person
//必须实现的方法
-(void)run{
NSLog(@"人在跑");
}
-(void)eat{
NSLog(@"人在吃东西");
}
@end
遵守协议
#import <Foundation/Foundation.h>
#import "baseAction.h"
@interface Tortoise : NSObject<baseAction>
@end
#import "Tortoise.h"
@implementation Tortoise
//必须实现的方法
-(void)run{
NSLog(@"乌龟在缓慢的爬行");
}
-(void)eat{
NSLog(@"乌龟不知道在吃什么东西");
}
//选择实现方法
-(void)dongmian{
NSLog(@"冬天来了,乌龟开始冬眠了");
}
@end
在main函数中的操作
#import <Foundation/Foundation.h>
#import "Person.h"
#import "Tortoise.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Person *p = [Person new];
[p run]; //人在跑
[p eat]; //人在吃东西
Tortoise *t = [Tortoise new];
[t run]; //乌龟在缓慢的爬行
[t eat]; //乌龟不知道在吃什么东西
[t dongmian]; //冬天来了,乌龟开始冬眠了
}
return 0;
}
协议可以对对象进行类型限制
对id进行类型限制
//对 id 进行类型限制,该id类型的对象必须实现baseAction协议
id<baseAction> person = p;
对类进行类型限制,
//对 Person 进行类型限制,该Person类型的对象必须实现baseAction协议
Person<baseAction> *p1 = p;
协议使用的注意事项
1)protocol就是协议,他就是用来声明许多方法,而不实现
2)只要某个类遵守这个协议,那么这个类就拥有这个协议中的所有方法的声明
3)只要父类遵守某个协议,那么子类也遵守,子类可以调用或重写父类实现的协议的方法(在父类中已经实现的方法,子类可以不实现,直接调用父类实现的方法),子类也可以实现父类没有实现的协议的选择实现类型的方法。
4)protocol声明的方法,可以让任何类实现
5)OC中得继承是单继承,但能遵守多个协议
6)基协议是NSObject,其中声明了很多基本方法
7)一个协议,也能遵守其他协议。