OC中的协议

------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


2)遵守一个协议:定义一个Person类,遵守baseAction协议

#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


上面Person类中没有实现协议的 dongmian 方法,因为它是一个选择实现方法,人不需要冬眠,下面我们定义一个乌龟的类,它需要冬眠,可以选择实现这个方法

遵守协议
#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)一个协议,也能遵守其他协议。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值