OC学习篇之---协议的概念和用法

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

在前一篇文章中我们介绍了OC中类的延展:http://blog.csdn.net/jiangwei0910410003/article/details/41775603,这一篇文章我们在来看一下OC中协议的概念以及用法,协议也是OC中的一个重点,Foundation框架以及我们后面在写代码都会用到。


OC中的协议就是相当于Java中的接口(抽象类),只不过OC中的名字更形象点,因为我们在学习Java中的接口时候,看可以知道其实接口就相当于一种契约(协议),给他的实现类打上标记了,当然这个活在Java5.0之后,被注解替代了,因为注解就是为了此功能诞生的。

协议就是定义了一组方法,然后让其他类去实现


下面来看代码:

WithProtocol.h

////  WithProtocol.h//  11_ProtocolDemo////  Created by jiangwei on 14-10-11.//  Copyright (c) 2014年 jiangwei. All rights reserved.//#import <Foundation/Foundation.h>@protocol WithProtocol <NSObject>//默认是必须实现的//必须实现@required- (void)finshTask;- (void)dontLate;//可选实现@optional- (void)wearNeat;@end
这里就定义了一个协议WithProtocl

协议的定义格式:

@protocol  协议名  <父协议>

定义方法

@end

注:定义协议的关键字是@protocol,同时协议也是可以继承父协议的


协议中定义的方法还有两个修饰符:

@required:这个表示这个方法是其他类必须实现的,也是默认的值

@optional:这个表示这个方法对于其他类实现是可选的

这个就和类似与Java中的抽象类了,如果是abstract修饰的就必须实现,所以如果一个协议中没有@optional修饰的方法,那么这个协议就相当于Java中的接口了。


这里要注意的是,上面的代码中NSObject不是我们之前说的NSObject类了,而是NSObject协议,他也是OC中第一个协议,这个名字相同在OC中是没有关系的。


再看一下协议的使用:

Student.h

////  Student.h//  11_ProtocolDemo////  Created by jiangwei on 14-10-11.//  Copyright (c) 2014年 jiangwei. All rights reserved.//#import <Foundation/Foundation.h>#import "WithProtocol.h"@interface Student : NSObject <WithProtocol>- (void)study;@end
使用协议很简单, 直接在继承类(NSObject)后面 <协议名>即可


Student.m

////  Student.m//  11_ProtocolDemo////  Created by jiangwei on 14-10-11.//  Copyright (c) 2014年 jiangwei. All rights reserved.//#import "Student.h"@implementation Student- (void)study{    NSLog(@"study");}//直接在.m文件中实现即可,不需要在.h文件中再次定义#pragma mark - WithProtocol- (void)finshTask{    NSLog(@"完成任务");}- (void)dontLate{//#warning 代码过几天在补充    NSLog(@"不迟到");}- (void)wearNeat{    NSLog(@"穿戴整洁");}@end
然后我们在实现类中,去实现协议中必须要实现的方法

注:这里用到了

#pragma mark - WithProtocol

这个作用就是做一下标记,标记后面的方法都是协议中的方法,这样就可以将一个类中的方法类别分的更细,我们在文件导航栏中进行查看:

猜你喜欢

转载自blog.csdn.net/hgfujffg/article/details/84000887
今日推荐