小结:这一堂课学习了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