OC学习篇之-----类目·延展·协议之--协议

本篇为:协议
以下是个人理解中的类目延展协议:

类目:为本类添加新的方法,例如为NSObject类,继承后自雷同样继承父类的类目中的方法
协议:声明了可以被任何类实现的方法(本身不实现,遵守此协议的类娶实现)
延展:为本类添加私有方法,延展的方法只供本类使用

注意:类目和延展都是不可以添加类的实例变量,若必须添加,应该用继承来达到目的(不推荐代码中的添加属性,然后通过重写设置器达到目的)

协议:
1.1是一个方法的列表
1.2声明了可以被任何类实现的方法(里面有你自己声明的各种方法,只要遵循了这个协议,谁都可以在自己的.m文件里实现里面的方法)
1.3格式:在类的后面加上<协议名>,表示此类遵循了这个协议
具体代码如下,细节都写在代码里面了:

2.首先声明一个协议列表(协议)

#import <Foundation/Foundation.h>
//这是一个协议,相当于这里面是一个拥有你放进去很多工具的箱子,下面的方法就是你放进去的工具
@protocol DigProtocol <NSObject>

//这是我放进去的工具
@required//这个关键字:你遵守了我这个协议,就必须实现我这个方法,在你的.m文件里面实现,
-(void)SayHello;

@optional//这个关键字:你遵守了我这个协议,我这个关键字标志的方法实不实现随便你,反正我就有
-(void)random;
@end

创建一个教师类,去遵守这个协议 .h文件

#import <Foundation/Foundation.h>
//我要用这个类去遵守协议,就必须要导入协议的头文件
#import "DigProtocol.h"
@interface Teacher : NSObject<DigProtocol>//后面加上<DigProtocol>就是表示这个类遵守了这个协议

//我遵守了这个类,我就必须去实现这个类里面的 @required 的方法,到自己的.M文件里面去实现

@property(nonatomic,copy)NSString *name;
@end

教师.m文件

#import "Teacher.h"

@implementation Teacher

//再来这里实现协议中 @required 的方法
-(void)SayHello{
    NSLog(@"我是%@ 老师,我遵守了学校的规章制度,你好啊",self.name);
}
@end

顺便提及一下代理。创建一个学生类,学生类里面有一个遵循了这个协议的代理属性

#import <Foundation/Foundation.h>
#import "DigProtocol.h"
@interface Student : NSObject

@property(nonatomic,copy)NSString *name;

//为了防止循环引用assign
@property(nonatomic,assign)id<DigProtocol>delegate;

@end

学生类的.m文件

#import "Student.h"

@implementation Student

@end

ViewController文件:

#import "ViewController.h"
#import "Student.h"
#import "Teacher.h"
//#import "DigProtocol.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    Student *stu1 = [Student new];
    Teacher *tea1 = [Teacher new];
    tea1.name = @"肖老师";
    stu1.name = @"小明";
    stu1.delegate = tea1;

    //判断是否有这个代理,且此代理需要遵守某个协议
    if (stu1.delegate && [stu1.delegate conformsToProtocol:@protocol(DigProtocol)]) {
        [tea1 SayHello];
    }else{

    }

以下是运行结果:

2015-12-23 11:38:33.714 OC_协议[1020:53002] 我是肖老师 老师,我遵守了学校的规章制度,你好啊

总结:协议为类提供了访问第三者方法一条通道,试用强大。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值