OC @protocol(声明协议 )
@protocol Study; int main(int argc, const char * argv[])
{ @autoreleasepool {
Student *stu = [[[Student alloc] init] autorelease]; // 注意:OC是弱语法的,对类型要求不严格
// NSString *stu = [[[Student alloc] init] autorelease];
// [stu stringByAbbreviatingWithTildeInPath]; // conformsToProtocol:判断是否遵守了某个协议
if ([stu conformsToProtocol:@protocol(Study)]) {
NSLog(@"Student遵守了Study这个协议");
} // respondsToSelector:判断是否实现了某个方法
if ( ![stu respondsToSelector:@selector(test)] ) {
NSLog(@"Student没有实现test这个方法");
}
}
return ;
}
#import <Foundation/Foundation.h> @protocol Study <NSObject>
// 默认就是@required
- (void)test3; // @required表示必须实现的方法
// 虽然字面上说是必须实现,但是编译器并不强求某个类进行实现
@required
- (void)test; - (void)test1; // @optional表示可选(可实现\也可不实现)
@optional
- (void)test2;
@end
#import <Foundation/Foundation.h>
@class Button; // <>代表实现某个协议
@protocol ButtonDelegate <NSObject>
- (void)onClick:(Button *)btn;
@end @interface Button : NSObject // delegate就是按钮的监听器
@property (nonatomic, retain) id<ButtonDelegate> delegate; // 点击按钮
- (void)click;
@end
#import "Button.h"
@implementation Button
- (void)dealloc {
[_delegate release];
[super dealloc];
}
- (void)click {
// 如果_delegate实现了onClick:这个方法
if ( [_delegate respondsToSelector:@selector(onClick:)] ) {
// 按钮被点击了,就应该通知监听器.并且告诉监听器哪个按钮被点击了
[_delegate onClick:self];
} else {
NSLog(@"监听器并没有实现onClick:方法");
}
}
@end
调用
#import <Foundation/Foundation.h>
#import "Button.h"
#import "ButtonListener.h"
#import "MyListener.h" int main(int argc, const char * argv[])
{ @autoreleasepool {
// 初始化一个按钮
Button *button = [[[Button alloc] init] autorelease]; // 初始化一个按钮的监听器
// ButtonListener *listener = [[[ButtonListener alloc] init] autorelease];
MyListener *listener = [[[MyListener alloc] init] autorelease]; // 设置按钮的监听器
button.delegate = listener;
NSLog(@"button:%@", button);
// 点击按钮
[button click]; Button *button2 = [[[Button alloc] init] autorelease];
button2.delegate = listener;
NSLog(@"button2:%@", button2);
// 点击button2
[button2 click];
}
return ;
}
OC @protocol(声明协议 )的更多相关文章
- OC语言的Block与Protocol(协议)
Block ● Block封装了一段代码,可以在任何时候执⾏行 ● Block可以作为函数参数或者函数的返回值,⽽而其本⾝身又可以带输⼊入参数或返回值. ● 苹果官⽅方建议尽量多⽤用block.在多线 ...
- oc语言--protocol(协议)
一.protocol 1.基本用途 1> 可以用来声明很多方法,但是不能用来声明成员变量 2> 只要某个类遵守了这个协议,就相当于拥有这个协议中的所有方法声明 3> 只要父类遵守了某 ...
- OC BLOCK和协议
一.BOLCK (一)简介 BLOCK是什么?苹果推荐的类型,效率高,在运行中保存代码.用来封装和保存代码,有点像函数,BLOCK可以在任何时候执行. block实际上是: 指向结构体的指针 BOLC ...
- Protocol(协议)
Protocol(协议) (一) (1)简介 1.Protocol:就一个用途,用来声明一大堆的方法(不能声明成员变量),不能写实现.看起来类似于一个类的接口, 不同的是协议没有父类,也不能定义实例变 ...
- protocol(协议) 和 delegate(委托)也叫(代理)---辨析
protocol和delegate完全不是一回事. 协议(protocol),(名词)要求.就是使用了这个协议后就要按照这个协议来办事,协议要求实现的方法就一定要实现. 委托(delegate),(动 ...
- Swift中声明协议中的class关键字的作用
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 最近在Cocos2D编程for Swift中看到以下一个代码片 ...
- loadrunner 脚本录制-Protocol Advisor协议分析器的使用
脚本录制-Protocol Advisor协议分析器的使用 by:授客 QQ:1033553122 1.启动Protocol Advisor File > Protocol Advisor &g ...
- Python抽象基类之声明协议
抽象基类之--声明协议 上回讲了Python中抽象基类的大概,相信大家对abcmeta以及什么是抽象基类已经有所了解.传送门 现在我们来讲讲抽象基类的另一个常用用法--声明协议 所谓声明协议,有点像J ...
- IOS开发-OC学习-protocol(协议)
在OC语言中,协议是一组方法,里面有两种方法,一种是遵守这个协议的类的实例必须实现的方法,另一种是可以实现也可以不实现的方法. 例如我定义一个学生的协议,这个协议里有两个方法,其中一个是必选的方法:学 ...
随机推荐
- 2019.03.26 读书笔记 关于for与foreach
for 是索引器,foreach是迭代器 foreach在movenext()中增加了对集合版本(一个整数,每次对集合修改都+1)的验证,另外反编译后的效果是使用了using(是try finally ...
- linux运维基础之系统挂载与etc文件下介绍
1) 目录结构说明: windows:磁盘----分区---格式化--系统 linux:磁盘--分区--生成一个文件(磁盘分区) linux 中一切皆文件 ll -h 显示人类能看懂的 mount - ...
- Android 中判断网络状态
首先在AndroidManifest.xml添加权限 <uses-permission android:name="android.permission.ACCESS_NETWORK_ ...
- jar包、jdk版本、兼容性
对jar包.jdk版本,以及不同jdk版本的jar包的兼容性有一些疑问,搜集一些资料于此 查看jar包的jdk版本 查看.jar包中的META-INF\MANIFEST.MF Build-Jdk: 1 ...
- 8086实时时钟实验(一)——《x86汇编语言:从实模式到保护模式》05
1.代码清单 ;代码清单9-1 ;文件名:c09_1.asm ;文件说明:用户程序 ;创建日期:2011-4-16 22:03 ;=================================== ...
- MongoDB的MapReduce用法及php示例代码
MongoDB虽然不像我们常用的mysql,sqlserver,oracle等关系型数据库有group by函数那样方便分组,但是MongoDB要实现分组也有3个办法: * Mongodb三种分组方式 ...
- JQuery脚本-通过禁用按钮防止表单重复提交
<script type="text/javascript"> /* jquer 脚本,避免重复提交 隐藏点击的submit,后在他之后插入同名button伪装成被隐藏 ...
- jQuery对象和DOM对象使用说明,需要的朋友可以参考下。
jQuery对象和DOM对象使用说明,需要的朋友可以参考下.1.jQuery对象和DOM对象第一次学习jQuery,经常分辨不清哪些是jQuery对象,哪些是 DOM对象,因此需要重点了解jQuery ...
- nyoj 1205——简单问题——————【技巧题】
简单问题 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 给你一个n*m的矩阵,其中的元素每一行从左到右按递增顺序排序,每一列从上到下按递增顺序排序,然后给你一些数x ...
- tornado handler 方法复用的 3 个方法
tornado handler 调用 特性 在一次 tornado 请求中调用其他 tornado handler 中的方法, 比如 run 方法 引言 在后台开发中, 有时需要做一些功能的整合, 比 ...