协议Protocol
2015-09-24 18:52
260 查看
对协议的认识:
1.协议是只能用来声明方法,不能声明成员变量,也不能写类的实现
2.如果某个类遵守了这个协议,也就拥有了协议所声明的方法
3.继承:父类遵守了这个协议,子类也遵守这个协议<>
4.协议声明的方法任何类都可以实现
5.协议弥补了OC单继承,可以遵守多个协议
6.最根本最基本的协议是<NSObject>,他声明了很多基本的方法
7.同样协议之间可以遵守,也就有了协议中的方法声明
Demo
这样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。谢谢博主的总结。
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。谢谢博主的总结。
相关文章推荐
- window开机启动项设置和取消方法
- 十月金在线编程竞赛的第二个冠军:解密
- pip的一些问题
- BaseAdapter
- iOS Xcode重要配置
- 几种中文分词工具
- Head First Python学习笔记3——持久存储
- ODS浅谈
- 把数据导出到Excel表格中的方式
- 从拓扑排序到广度优先搜索到单源最短路径
- redhat 6 配置 yum 源
- Google Chrome Source Code 源码下载
- 《iOS Human Interface Guidelines》——iOS App Anatomy
- git 记住用户名密码
- Linux开机过程的分析(关于bootsect.S)
- copypng emitted errors but did not return a nonzero exit code to indicate failure
- bulk load关于分隔符的问题
- 轻松搞定RabbitMQ(三)——消息应答与消息持久化
- (hdu step 7.1.2)You can Solve a Geometry Problem too(乞讨n条线段,相交两者之间的段数)
- shell脚本编程-检查和测试