对协议的认识:
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。谢谢博主的总结。