黑马程序员--OC之@protocol的概念以及使用

黑马程序员--OC之@protocol的概念以及使用

------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
1、协议的概念
    接口就是一堆方法的声明没有实现,而在OC里面,Interface是一个类的头文件的声明,并不是真正意义上的接口的意思,在OC中,接口是由一个叫做协议的protocol来实现的。
2、protocol的使用流程
    协议的使用流程:
定义协议----> 在类中采用指定的协议---->实现协议中的方法(注意方法有必须实现和选择实现两种)
3、协议的使用
协议的定义
@protocol协议名称<NSObject> //默认遵守NSObject协议
//方法声明列表
@end;
注意:
协议默认的要采纳NSObject的协议
4、采纳协议
    1)类遵守协议
创建类的时候遵守某个或者某几个协议
@interface 类名 : 父类 <协议名称>
@end
@interface 类名 : 父类 <协议名称1,协议名称2>
@end
某个协议也遵守某个或者某些协议,一个协议可以遵守其他多个协议,
    2)协议遵守协议
@protocol协议名称<其他协议名称>
@end
    3)多个协议之间用逗号 , 隔开。
@protocol 协议名称 <其他协议名称1, 其他协议名称2>
@end
    4)实现协议中的方法
5、protocol的基本使用 
    1)定义协议
协议的定义
@protocol协议名称<NSObject>
//方法声明列表
@end;
注意:
协议默认的要采纳NSObject的协议
Run.h
#import <Foundation/Foundation.h>
@protocolRun <NSObject>
-(void)eat;
-(void)run;
@end
Work.h
#import <Foundation/Foundation.h>
@protocolWork <NSObject>
-(void)myWork;
@end
    2)采纳协议
    注意:采纳协议要先把要采纳的协议引入过来
某个类遵守某个协议
@interface 类名 : 父类 <协议名称>
@end
//引入要采纳的协议
#import "Run.h"
//采纳协议
@interfacePerson : NSObject<Run>
@end
      某个协议遵守某个或者某些协议,一个协议可以遵守其他多个协议,
多个协议之间用逗号 , 隔开。
@protocol 协议名称 <协议名称1,协议名称2>
@end
//引入要采纳的协议
#import "Run.h"
#import "Work.h"
//采纳协议
@interfacePerson : NSObject<Run,Work>
@end
    3)协议遵守协议
@protocol协议名称<其他协议名称>
@end;
    4)实现协议中的方法
    如果一个类遵守了某个协议
则只需要在这个类的实现(.m)文件中,实现协议的方法就可以了
Person.h
#import "Person.h"
@implementationPerson
-(void)run{
NSLog(@"人会跑");
}
-(void)eat{
NSLog(@"人开始吃东西");
}
-(void)myWork{
NSLog(@"人要工作");
}
@end
6、protocol的使用注意
    1)Protocol:就一个用途,用来声明一大堆的方法(不能声明成员变量),不能写实现。
    2)只要某个类遵守了这个协议,就拥有了这个协议中的所有方法声明。
    3)只要父类遵守了某个协议,那么子类也遵守。
    4)Protocol声明的方法可以让任何类去实现,protocol就是协议。
    5)OC不能继承多个类(单继承)但是能够遵守多个协议。继承(:),遵守协议(<>)
    6)基协议:<NSObject>是基协议,是最根本最基本的协议,其中声明了很多最基本的方法。
    7)协议可以遵守协议,一个协议遵守了另一个协议,就可以拥有另一份协议中的方法声明
    8)协议之间可以有继承关系
使用Protocol时还需要注意的是:
protocol也可以采纳其他的协议,比如:
@protocol A
-(void)methodA;@end@protocol B <A> -(void)methodB;@end
如果你要遵守B协议,那么methodA和methodB都需要实现。
    9)类如果采纳协议后,实现了协议的方法,这些方法可以被子类继承
比如:
Person类采纳了Run和Work两个协议,并实现了两个方法
Student类继承了Person类,则此时Student 类中可以调用和重写协议中的方法(实际上是子类Student 继承自Person的方法)
7、protocol中@required和@optional
    1)@required和@optional是协议方法声明中的两个关键字
他们主要用于控制方法是否要实现(默认是@required),在大多数情况下,
用途在于程序员之间的交流
@public
@protected
@private
@package
@required:这个方法必须要实现(若不实现,编译器会发出警告)
@protocolRunProtocol <NSObject>
//@required表示必须要实现的方法
@required
-(void)run;
//可以选择实现的方法
@optional
-(void)eat;
@end
8、protocol代理设计模式概念
    代理模式概念
传入的对象,代替当前类完成了某个功能,称为代理模式
利用协议实现代理模式的主要思路为:
    1)定义一个协议,里面声明代理类需要实现的方法列表, 比如这里一个代理类需要实现feedBaby与HongSleep方法
    2)创建一个代理类(比如BaoMu),遵守上面的代理协议
    3)在需要代理的类中(Baby),定义一个对象类型为id且遵守代理协议的成员变量
    4)在Baby类中调用成员变量_delegate(代理)的方法,调用代理类的方法
    5)main.m或其他使用Baby类的文件中,为Baby类的成员变量(代理类)赋值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值