OC之protocol监听器的实现
- 画图
- 图解
- 代码
- 总结
一、画图
本人画了一个图(字体和画图水平请忽略)
二、图解
1.首先我们上边是一个按钮的类,按钮当中包括了一条线,这个线是什么呢?
其实难理解就难理解到这条线上了
1⃣️这条线首先来说属于按钮的一部分,是一个成员变量
2⃣️这条线中定义了一个协议,什么协议?为什么要定义协议?我想到一个非常好的例子
我们的电脑想要实现通信,遵循的是TCP/IP协议,协议本身独立了我们电脑存在。但是我们电脑内部默认有那么一个东西让我们实现了这个协议
3⃣️监听器也实现这个协议,接着上边的例子
腾讯的qq服务器想知道我们是不是登qq,他就也需要实现TCP/IP协议。相当于我们现在实现了连同
总结:点击登录qq,通过协议传给腾讯服务器,实现登录。OK!
三、代码
1.协议
//
// ButtonProtocol.h
// 监听器的实现
//
// Created by apple on 14-3-26.
// Copyright (c) 2014年 apple. All rights reserved.
// #import <Foundation/Foundation.h> @protocol ButtonProtocol <NSObject>
-(void)onClick:(Button *)btn;
@end
很简单,协议里面就有一个onClick方法
2.Button类
//
// Button.h
// 监听器的实现
//
// Created by apple on 14-3-26.
// Copyright (c) 2014年 apple. All rights reserved.
// #import <Foundation/Foundation.h>
#import "ButtonProtocol.h" @interface Button : NSObject //我们说的Button的那条线
@property (nonatomic, retain) id<ButtonProtocol> delegate; -(void)press; @end
//
// Button.m
// 监听器的实现
//
// Created by apple on 14-3-26.
// Copyright (c) 2014年 apple. All rights reserved.
// #import "Button.h" @implementation Button -(void)press
{
[_delegate onClick];
} @end
3.ButtonListener类
//
// ButtonListener.h
// 监听器的实现
//
// Created by apple on 14-3-26.
// Copyright (c) 2014年 apple. All rights reserved.
// #import <Foundation/Foundation.h>
#import "ButtonProtocol.h" @interface ButtonListener : NSObject <ButtonProtocol> @end
//
// ButtonListener.m
// 监听器的实现
//
// Created by apple on 14-3-26.
// Copyright (c) 2014年 apple. All rights reserved.
// #import "ButtonListener.h" @implementation ButtonListener -(void)onClick
{
NSLog(@"按钮被点击了");
} @end
代码都还是挺简单的,主要还是理解。理解了代码就自然出来了
四、总结
其实就是一个通信过程,通信双方需要遵守相同的协议。
OC之protocol监听器的实现的更多相关文章
- oc中protocol、category和继承的区别
OC中protocol.category和继承的区别以前还是有点迷糊,面试的时候说的有点混乱,现在结合一些资料总结一下. 利用继承,多态是一个很好的保持"对扩展开放.对更改封闭"( ...
- [OC笔记] protocol之我的见解
OC中的protocol就是和JAVA中interface差不多的东西,但是又不是完全一样的.这个protocol常用来实现委托,也就是自己不实现,当事件产生的时候去回调委托者. 让委托者去执行响应的 ...
- OC中protocol、category和继承的关系--转
开放封闭原则(OCP)就是,“对扩展开放,对更改封闭”.是所有面向对象设计的一个核心宗旨.感兴趣的可以看百度百科的一些解释:http://baike.baidu.com/view/2493421.ht ...
- oc语言--protocol(协议)
一.protocol 1.基本用途 1> 可以用来声明很多方法,但是不能用来声明成员变量 2> 只要某个类遵守了这个协议,就相当于拥有这个协议中的所有方法声明 3> 只要父类遵守了某 ...
- swift和oc的protocol的成员变量
都需要协议实现者提供具体变量: 否则认为不符合协议. @protocol edddd <NSObject> @property(nonatomic, strong) NSObject *e ...
- 在编译oc中protocol时出现的错误
Command /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang ...
- OC语法10——@protocol协议,
参考资料:博客 @protocol,协议: OC中protocol的含义和Java中接口的含义是一样的,它们的作用都是为了定义一组方法规范. 实现此协议的类里的方法,必须按照此协议里定义的方法规范来. ...
- OC和Java的比较
1.Cocoa是什么?Cocoa是使用OC语言编写的工具包,里面有大量的类库.结构体,说白了其实就相当于java中的标准API.C++中的标准库.OC中没有命名空间的概念,所以使用加前缀来防止命名冲突 ...
- OC & java 对比
Objective-C的语法对比(和Java的对比) Objective-C的语法对比(和Java的对比) 1.函数的对比 例子: helloworld方法 Java 语言: publi ...
随机推荐
- django admin site配置(二)
1. ModelAdmin.inlines 将有外键的子类包含进视图 ,实例: class Author(models.Model): name = models.CharField(max_leng ...
- 分享吉林大学机械科学与工程学院,zhao jun 博士的Halcon学习过程及知识分享
分享吉林大学机械科学与工程学院,zhao jun 博士的Halcon学习过程及知识分享 全文转载zhao jun 博士的新浪博客,版权为zhaojun博士所有 原文地址:http://blog.sin ...
- 关于TabControl的Trigger【项目】
我有一个TabControl <TabControl x:Name="ToolSystemSection" Grid.Row="4" ContentTem ...
- Segger RTT : Real Time Terminal SRAM 调试解决方法
http://segger.com/jlink-real-time-terminal.html Real Time Terminal SEGGER's Real Time Terminal (RTT) ...
- jQuery hover事件鼠标滑过图片半透明标题文字滑动显示隐藏
1.效果及功能说明 hover事件制作产品图片鼠标滑过图片半透明,标题文字从左到右滑动动画移动显示隐藏 2.实现原理 首先把效果都隐藏,然后定义一个伪类来触发所有的效果,接下来当触发伪类后会有一个遍历 ...
- 怎样用JS来添加CSS样式
方法: document.getElementById("xx").style.xxx中的全部属性是什么 盒子标签和属性对比 CSS语法(不区分大写和小写) JavaScript语 ...
- Redis缓存服务搭建及实现数据读写
发现博客园中好多大牛在介绍自己的开源项目是很少用到缓存,比如Memcached.Redis.mongodb等,今天得空抽时间把Redis缓存研究了一下,写下来总结一下,跟大家一起分享 一下.由于小弟水 ...
- 0c-35-自动释放池使用注意
.autorelease使用注意 )并不是放到自动释放池中,都会自动加入到自动释放池 1.1) 因为没有调用autorelease方法,所以对象没有加入到自动释放池. int main(){ @aut ...
- 云服务器 ECS Linux 磁盘空间满(含 innode 满)问题排查方法
问题描述 在云服务器 ECS Linux 系统内创建文件时,出现类似如下空间不足提示: No space left on device … 问题原因 导致该问题的可能原因包括: 磁盘分区空间使用率达到 ...
- mysql 参数read_rnd_buffer_size的真正含义
http://dev.mysql.com/doc/refman/5.7/en/order-by-optimization.html http://dev.mysql.com/doc/refman/ ...