2015.7.29 第四堂 protocol协议

小结:这一堂课学习了protocol协议,以很生动的举例(如职工协议、猫狗人的动作)深入了其了解。protocol实际上是一个接口,他可以被任何类实现,其中有必须实现的required,有选择实现的optional。比较简单易于理解,之后对其进行小练习。


知识点一:protocol协议的定义

一系列不属于任何类的方法列表,其中声明的方法可以被任何类实现

协议不是类,它是定义了一个其他对象可以实现的接口

如果在某个类中实现了协议中的某个方法,就说明服从了这个协议

注意:

1.协议中不能定义属性变量或者成员变量,只能定义方法

2.一可以服从多

3.协议中定义的方法不一定实现 OC是弱语法)


知识点二:之前补充 OC基础 obejetive c programming guide

 1.property的使用

 2.ios开发/面向对象)继承

 3.protocol 协议-代理(委托)

 4.category 类别

 5.block

 6.OC内存管理

 developer.apple.com -resours -library -memormanagement

 重点 foundation框架 各自有哪些方法


知识点三:protocol的定义

//定义一个协议

@protocol AnimalActionProtocol <NSObject> //尖括号里是其服从的协议


@required //下面的方法必须实现

- (void)eat;


@optional //下面的方法可以选择实现

- (void)run;

- (void)say;

- (void)sleep;


@end


知识点四:判断对象实现方法,判断对象服从协议

        //判断某个对象有没有实现某个方法

        if ([animal respondsToSelector:@selector(run)]) {

            NSLog(@"实现了这个方法");

        } else{

            NSLog(@"没有实现这个方法");

        }

        

        //判断某个对象是否服从了某个协议

        if ([animal conformsToProtocol:@protocol(AnimalActionProtocol)]){

            NSLog(@"服从了");

        } else{

            NSLog(@"么有服从");

        }

知识点五:回顾成员变量和属性变量的区别

@interface Person : NSObject<AnimalActionProtocol>{

    NSString *name;//成员变量

}

@property (nonatomic, copy) NSString *address;//属性变量

@end


代码如下:

//
//  main.m
//  Protocol
//
//  Created by Baocloud-iMac8 on 15/7/29.
//  Copyright (c) 2015年 宝擎教育. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Dog.h"
#import "Person.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //Dog *dd = [[Dog alloc] init];
        id<AnimalActionProtocol> animal = [[Person alloc] init];
        
        //判断某个对象有没有实现某个方法
        if ([animal respondsToSelector:@selector(run)]) {
            NSLog(@"实现了这个方法");
        } else{
            NSLog(@"没有实现这个方法");
        }
        
        //判断某个对象是否服从了某个协议
        if ([animal conformsToProtocol:@protocol(AnimalActionProtocol)]){
            NSLog(@"服从了");	
        } else{
            NSLog(@"么有服从");
        }
        
    }
    return 0;
}

//
//  Person.h
//  Protocol
//
//  Created by Baocloud-iMac8 on 15/7/29.
//  Copyright (c) 2015年 宝擎教育. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "AnimalActionProtocol.h"

@interface Person : NSObject<AnimalActionProtocol>{
    NSString *name;//成员变量
}

@property (nonatomic, copy) NSString *address;//属性变量

@end

//
//  Person.m
//  Protocol
//
//  Created by Baocloud-iMac8 on 15/7/29.
//  Copyright (c) 2015年 宝擎教育. All rights reserved.
//

#import "Person.h"

@implementation Person
	
//必须实现的方法
- (void)eat{
    NSLog(@"我要	一个吃货 我是肉墩墩");
}

//可选方法  根据自己的情况选择实现
- (void)say{
    NSLog(@"说多了 都是泪");
}

- (void)run{
    NSLog(@"我要参加running man");
}

- (void)sleep{
    NSLog(@"我是睡美人儿");
}

@end

//
//  Dog.h
//  Protocol
//
//  Created by Baocloud-iMac8 on 15/7/29.
//  Copyright (c) 2015年 宝擎教育. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "AnimalActionProtocol.h"

@interface Dog : NSObject<AnimalActionProtocol>

@end

//
//  Dog.m
//  Protocol
//
//  Created by Baocloud-iMac8 on 15/7/29.
//  Copyright (c) 2015年 宝擎教育. All rights reserved.
//

#import "Dog.h"

@implementation Dog

//必须实现的方法
- (void)eat{
    NSLog(@"舌尖上的小狗");
}

//可选方法
- (void)say{
    NSLog(@"汪汪汪");
}
- (void)sleep{
    NSLog(@"胖胖滴 么么哒");
}
@end

//
//  AnimalActionProtocol.h
//  Protocol
//
//  Created by Baocloud-iMac8 on 15/7/29.
//  Copyright (c) 2015年 宝擎教育. All rights reserved.
//

#import <Foundation/Foundation.h>

//定义一个协议
@protocol AnimalActionProtocol <NSObject>

@required //下面的方法必须实现
- (void)eat;

@optional //下面的方法可以选择实现
- (void)run;
- (void)say;
- (void)sleep;

@end



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值