协议Protocol

对协议的认识:

1.协议是只能用来声明方法,不能声明成员变量,也不能写类的实现

2.如果某个类遵守了这个协议,也就拥有了协议所声明的方法

3.继承:父类遵守了这个协议,子类也遵守这个协议<>

4.协议声明的方法任何类都可以实现

5.协议弥补了OC单继承,可以遵守多个协议

6.最根本最基本的协议是<NSObject>,他声明了很多基本的方法

7.同样协议之间可以遵守,也就有了协议中的方法声明

Demo

//  Student.h
//  协议Dome
//
//  Created by administrator on 15-9-24.
//  Copyright (c) 2015年 Ytt. All rights reserved.
//

#import <Foundation/Foundation.h>

#import "OneProtocol.h"
@interface Student : NSObject <OneProtocol>
- (void)study;

@end
#import "Student.h"

@implementation Student

-(void)study
{
    NSLog(@"study!");
}

-(void)finishTask{
    NSLog(@"完成任务!");
}

-(void)dontLate
{
    NSLog(@"不迟到!");
}

-(void)wearNeat
{
    NSLog(@"穿戴整洁!");
}

//  OneProtocol.h
//  协议Dome
//
//  Created by administrator on 15-9-24.
//  Copyright (c) 2015年 Ytt. All rights reserved.
//

#import <Foundation/Foundation.h>

@protocol OneProtocol <NSObject>

//必须实现
@required
- (void)finishTask;
- (void)dontLate;

@optional
- (void)wearNeat;


@end

//  main.m
//  协议Dome
//
//  Created by administrator on 15-9-24.
//  Copyright (c) 2015年 Ytt. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Student.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Student *stu = [[Student alloc]init];
        [stu finishTask];
        [stu dontLate];
        
        if ([stu respondsToSelector:@selector(wearNeat)]) {
            [stu wearNeat];
        }
      
    }
    return 0;
}
运行结果:
2015-09-24 16:58:49.627 协议Dome[4639:303] 完成任务!
2015-09-24 16:58:49.629 协议Dome[4639:303] 不迟到!
2015-09-24 16:58:49.629 协议Dome[4639:303] 穿戴整洁!
Program ended with exit code: 0

这样Student类中的stu对象就遵守了OneProtocol协议声明的方法。

1.协议的定义

@protocol  协议名称<NSObject>

方法声明列表

@end;

2.如何遵守协议

(1)类遵守协议

@protocol 类名:父类名 <协议名称1,协议名称2>

@end

(2)协议遵守协议

@protocol 协议名称 <其他协议名称>

@end;

3.协议方法声明中的关键字

(1)required (默认)要求实现,若没有实现则警告但不报错

(2)Optional 不要求实现

4.定义变量时遵守协议的限制

类名<协议名称> *变量名    NSObject<.Myprotocol> *obj;

Id  <协议名称>  变量名   id  <.Myprotocol> obj1;

 

5.Property中声明的属性也可以做遵守协议的限制

@property (nonatomic ,strong ) 类名<协议名称> *属性名;

@property (nonatomic ,strong ) id<协议名称>  属性名;

6.当这个协议只需一个类遵守时,可以把协议卸载这个类里面,当这个协议需要多个类去实现时,就写在.h文件中

参考链接:http://www.cnblogs.com/wendingding/p/3709604.html。谢谢博主的总结。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值