[OC笔记] protocol之我的见解
OC中的protocol就是和JAVA中interface差不多的东西,但是又不是完全一样的。这个protocol常用来实现委托,也就是自己不实现,当事件产生的时候去回调委托者。
让委托者去执行响应的动作。
咱们先定义一个Button类来模拟按钮代码如下
Button.h
#import <Foundation/Foundation.h> @class Button; @protocol ButtonEventDelegate <NSObject> -(void)onClick:(Button*)mButton btn_id:(int)btn_id; @end @interface Button : NSObject @property(nonatomic,assign) id<ButtonEventDelegate> listener; @property(nonatomic) int btn_id; -(void)performClick; +(id)buttonWithId:(int)btn_id listener:(id<ButtonEventDelegate>)listener; @end
Button.m
#import "Button.h" @implementation Button #pragma mark 快速创建一个Button
+(id)buttonWithId:(int)btn_id listener:(id<ButtonEventDelegate>)listener{
Button *btnInstance=nil; if((btnInstance=[[super alloc] init])){
[btnInstance setBtn_id:btn_id];
[btnInstance setListener:listener];
[btnInstance autorelease];
}
return btnInstance;
}
#pragma mark 用来触发点击事件
-(void)performClick{
//判断是否实现了onClick:btn_id:方法
if([[self listener] respondsToSelector:@selector(onClick:btn_id:)]){
NSLog(@"响应了事件");
[[self listener]onClick:self btn_id:[self btn_id]];
}else{
//如果没有实现onClick:btn_id:方法就不执行,这样就更加安全了
NSLog(@"没有响应事件");
}
}
#pragma mark 销毁
-(void)dealloc{
NSLog(@"销毁了Button>>");
[super dealloc];
}
@end
接下来是protocol的实现
@protocol ButtonEventDelegate; @interface ButtonListener : NSObject <ButtonEventDelegate> @end @implementation ButtonListener -(void)onClick:(Button *)mButton btn_id:(int)btn_id{
NSLog(@"点击了按钮");
}
-(void)dealloc{
NSLog(@"销毁了监听器");
[super dealloc];
}
@end
组装使用
#import <Foundation/Foundation.h>
#import "Button.h"
#import "ButtonListener.h" int main(int argc, const char * argv[])
{
@autoreleasepool {
ButtonListener *listener =[[ButtonListener alloc] init];
Button *mButton =[Button buttonWithId: listener:listener];
//设置监听
[mButton setListener:listener];
//触发事件
[mButton performClick];
//释放listener
[listener release];
//button对象是autorelease的,所以我们不需要去维护
}
return ;
}
[OC笔记] protocol之我的见解的更多相关文章
- oc中protocol、category和继承的区别
OC中protocol.category和继承的区别以前还是有点迷糊,面试的时候说的有点混乱,现在结合一些资料总结一下. 利用继承,多态是一个很好的保持"对扩展开放.对更改封闭"( ...
- [OC笔记] Category分类之见解
用过别的语言做过开发的同学都知道,如果你想扩充一个类,就应该去继承这个类.但是OC里面有更好的方法,那就是分类. 那什么是分类呢?就是在不改变原先类,我们可以在其中添加咱们自定义的方法,这样和同事合作 ...
- OC中protocol、category和继承的关系--转
开放封闭原则(OCP)就是,“对扩展开放,对更改封闭”.是所有面向对象设计的一个核心宗旨.感兴趣的可以看百度百科的一些解释:http://baike.baidu.com/view/2493421.ht ...
- OC笔记一:Objective-C简介
1.OC简介 全称:Objective-C,是扩充C的面向对象编程语言,主要用于iOS和Mac OS开发. C语言的基础上,增加了一层最小的面向对象语法 完全兼容C语言 可以在OC代码中混入C语言代码 ...
- [OC笔记]@property之个人理解,大神轻拍
/** * 一个简单的对象 * * @author suzhen * */ public class SimpleObjcet { /** * 声明一个age字段 */ private Object ...
- OC笔记一:Objective
1.OC简介 全称:Objective-C,是扩充C的面向对象编程语言,主要用于iOS和Mac OS开发. C语言的基础上,增加了一层最小的面向对象语法 完全兼容C语言 可以在OC代码中混入C语言代码 ...
- [OC笔记]我的第一个OC程序
这是我第一个OC程序,详情都写在了注释里面,讲的是Student和Book这两个类的创建和使用.(是不是觉得student这个类在各种语言入门代码里经常出现呢?真实有爱) 看完这些,你会发现,咱们其实 ...
- OC之protocol监听器的实现
画图 图解 代码 总结 一.画图 本人画了一个图(字体和画图水平请忽略) 二.图解 1.首先我们上边是一个按钮的类,按钮当中包括了一条线,这个线是什么呢? 其实难理解就难理解到这条线上了 1⃣️这条线 ...
- oc语言--protocol(协议)
一.protocol 1.基本用途 1> 可以用来声明很多方法,但是不能用来声明成员变量 2> 只要某个类遵守了这个协议,就相当于拥有这个协议中的所有方法声明 3> 只要父类遵守了某 ...
随机推荐
- Angualr2 - 使用 VS2015
使用 Vs 2015 快速上手 Angular2 许多程序员希望能够使用 VS2015 作为 IDE 来开发 Angular 2 应用,这里介绍如何设置 VS2015,使用快速上手文件来搭建 ASP. ...
- IIS 发布添加网站错误:HTTP 错误 500.21 - Internal Server Error 解决方案
原因:在安装Framework v4.0之后,再启用IIS,导致Framework没有完全安装 解决:开始->所有程序->附件->鼠标右键点击“命令提示符”->以管理员身份运行 ...
- TableViewCell,TableView,UITableViewCell
这次的学习是在Navigation-based Application模板中,用RootViewController class设置操作方法,使用UITableView的属性值.在导航控制器控件为程序 ...
- 0,SFDC 开发篇 - 开发框架和APEX语法
1, 开发环境 Your Name | Developer Console | Debug | Open Execute Anonymous Window 输入hello world,并点击Excut ...
- virt-manager管理整个云平台的instances
http://people.redhat.com/~rjones/virt-top/faq.html
- centos7使用传统网卡名
http://serverfault.com/questions/692897/centos-7-disable-predictable-network-interface-names-during- ...
- Upload files to aliyunOSS with bootstrap-fileinput
本文主要涉及两个概念: 阿里云OSS:对象存储(Object Storage Service,简称OSS),是阿里云对外提供的海量.安全和高可靠的云存储服务. bootstrap-fileinput: ...
- asp.net上传文件超过了最大请求长度[转]
错误消息:超过了最大请求长度 错误原因:asp.net默认最大上传文件大小为4M,运行超时时间为90S. 解决方案 1. 修改web.config文件可以改变这个默认值 ...
- AP创建会计科目
一. 创建会计科目的途径 1. 在发票工作台对单张发票进行创建科目: 2. 提交“创建会计科目”并发请求,对所有已经验证但尚未创建会计科目的发票进行创建会计科目. 二. 对单张发票创建会计科目 发票在 ...
- iOS中CocoaPads的安装与配置(总结)
来说一下安装CocoaPots的顺序: Xcode->homebrew->RVM->Ruby->CocoaPats; 这篇文章之讲解如何安装到Ruby的部分,关于安装好Ruby ...